home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / Mesa-2.2 / src / get.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-03-13  |  99.7 KB  |  3,299 lines

  1. /* $Id: get.c,v 1.9 1997/03/11 00:57:38 brianp Exp $ */
  2.  
  3. /*
  4.  * Mesa 3-D graphics library
  5.  * Version:  2.2
  6.  * Copyright (C) 1995-1997  Brian Paul
  7.  *
  8.  * This library is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU Library General Public
  10.  * License as published by the Free Software Foundation; either
  11.  * version 2 of the License, or (at your option) any later version.
  12.  *
  13.  * This library is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * Library General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Library General Public
  19.  * License along with this library; if not, write to the Free
  20.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22.  
  23.  
  24. /*
  25.  * $Log: get.c,v $
  26.  * Revision 1.9  1997/03/11 00:57:38  brianp
  27.  * removed redundant GL_POLYGON_OFFSET_FACTOR_EXT cases
  28.  *
  29.  * Revision 1.8  1997/02/10 21:15:59  brianp
  30.  * renamed GL_TEXTURE_BINDING_3D_EXT to GL_TEXTURE_3D_BINDING_EXT
  31.  *
  32.  * Revision 1.7  1997/02/09 19:53:43  brianp
  33.  * now use TEXTURE_xD enable constants
  34.  *
  35.  * Revision 1.6  1997/02/09 18:49:23  brianp
  36.  * added GL_EXT_texture3D support
  37.  *
  38.  * Revision 1.5  1997/01/30 21:05:20  brianp
  39.  * moved in gl_GetPointerv() from varray.c
  40.  * added some missing GLenums to the glGet*() functions
  41.  *
  42.  * Revision 1.4  1997/01/28 22:13:42  brianp
  43.  * now there's separate state for CI and RGBA logic op enabled
  44.  *
  45.  * Revision 1.3  1996/10/11 03:43:34  brianp
  46.  * replaced old texture _EXT symbols
  47.  * added GL_EXT_polygon_offset stuff
  48.  *
  49.  * Revision 1.2  1996/09/15 14:17:30  brianp
  50.  * now use GLframebuffer and GLvisual
  51.  *
  52.  * Revision 1.1  1996/09/13 01:38:16  brianp
  53.  * Initial revision
  54.  *
  55.  */
  56.  
  57.  
  58. #include <string.h>
  59. #include "context.h"
  60. #include "get.h"
  61. #include "dlist.h"
  62. #include "macros.h"
  63. #include "types.h"
  64.  
  65.  
  66.  
  67. #define FLOAT_TO_BOOL(X)    ( (X)==0.0F ? GL_FALSE : GL_TRUE )
  68. #define INT_TO_BOOL(I)        ( (I)==0 ? GL_FALSE : GL_TRUE )
  69. #define ENUM_TO_BOOL(E)        ( (E)==0 ? GL_FALSE : GL_TRUE )
  70. /*#define FLOAT_TO_INT(I)        ((GLint) (I * 2147483647.0))*/
  71.  
  72.  
  73.  
  74. /*
  75.  * Given a color component scale value such as CC.RedScale, CC.BlueScale,
  76.  * etc. return the number of bits implied by that scaling.  This is
  77.  * usually expressed by:  scale = 2^bits - 1.
  78.  * Example:  if RedScale==63.0, bits must be 6.
  79.  * Input:  a color component scale value
  80.  * Return:  number of bits implied by the scale value.
  81.  */
  82. static GLuint bits( GLfloat scale )
  83. {
  84.    GLuint iscale, bits;
  85.  
  86.    iscale = (GLuint) scale;
  87.    for (bits=0; iscale>0; bits++) {
  88.       iscale = iscale >> 1;
  89.    }
  90.    return bits;
  91. }
  92.  
  93.  
  94.  
  95. void gl_GetBooleanv( GLcontext *ctx, GLenum pname, GLboolean *params )
  96. {
  97.    GLuint i;
  98.  
  99.    if (INSIDE_BEGIN_END(ctx)) {
  100.       gl_error( ctx, GL_INVALID_OPERATION, "glGetBooleanv" );
  101.       return;
  102.    }
  103.  
  104.    switch (pname) {
  105.       case GL_ACCUM_RED_BITS:
  106.       case GL_ACCUM_GREEN_BITS:
  107.       case GL_ACCUM_BLUE_BITS:
  108.       case GL_ACCUM_ALPHA_BITS:
  109.          *params = INT_TO_BOOL(sizeof(GLaccum)*8);
  110.          break;
  111.       case GL_ACCUM_CLEAR_VALUE:
  112.          params[0] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[0]);
  113.          params[1] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[1]);
  114.          params[2] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[2]);
  115.          params[3] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[3]);
  116.          break;
  117.       case GL_ALPHA_BIAS:
  118.          *params = FLOAT_TO_BOOL(ctx->Pixel.AlphaBias);
  119.          break;
  120.       case GL_ALPHA_BITS:
  121.          if (ctx->Visual->FrontAlphaEnabled || ctx->Visual->BackAlphaEnabled) {
  122.             *params = GL_TRUE;
  123.          }
  124.          else {
  125.             *params = GL_FALSE;
  126.          }
  127.          break;
  128.       case GL_ALPHA_SCALE:
  129.          *params = FLOAT_TO_BOOL(ctx->Pixel.AlphaScale);
  130.          break;
  131.       case GL_ALPHA_TEST:
  132.          *params = ctx->Color.AlphaEnabled;
  133.          break;
  134.       case GL_ALPHA_TEST_FUNC:
  135.          *params = ENUM_TO_BOOL(ctx->Color.AlphaFunc);
  136.          break;
  137.       case GL_ALPHA_TEST_REF:
  138.          *params = FLOAT_TO_BOOL(ctx->Color.AlphaRef);
  139.          break;
  140.       case GL_ATTRIB_STACK_DEPTH:
  141.          *params = INT_TO_BOOL(ctx->AttribStackDepth);
  142.          break;
  143.       case GL_AUTO_NORMAL:
  144.          *params = ctx->Eval.AutoNormal;
  145.          break;
  146.       case GL_AUX_BUFFERS:
  147.          *params = (NUM_AUX_BUFFERS) ? GL_TRUE : GL_FALSE;
  148.          break;
  149.       case GL_BLEND:
  150.          *params = ctx->Color.BlendEnabled;
  151.          break;
  152.       case GL_BLEND_DST:
  153.          *params = ENUM_TO_BOOL(ctx->Color.BlendDst);
  154.          break;
  155.       case GL_BLEND_SRC:
  156.          *params = ENUM_TO_BOOL(ctx->Color.BlendSrc);
  157.          break;
  158.       case GL_BLEND_EQUATION_EXT:
  159.      *params = ENUM_TO_BOOL( ctx->Color.BlendEquation );
  160.      break;
  161.       case GL_BLEND_COLOR_EXT:
  162.      params[0] = FLOAT_TO_BOOL( ctx->Color.BlendColor[0] );
  163.      params[1] = FLOAT_TO_BOOL( ctx->Color.BlendColor[1] );
  164.      params[2] = FLOAT_TO_BOOL( ctx->Color.BlendColor[2] );
  165.      params[3] = FLOAT_TO_BOOL( ctx->Color.BlendColor[3] );
  166.      break;
  167.       case GL_BLUE_BIAS:
  168.          *params = FLOAT_TO_BOOL(ctx->Pixel.BlueBias);
  169.          break;
  170.       case GL_BLUE_BITS:
  171.          *params = INT_TO_BOOL( bits( ctx->Visual->BlueScale ) );
  172.          break;
  173.       case GL_BLUE_SCALE:
  174.          *params = FLOAT_TO_BOOL(ctx->Pixel.BlueScale);
  175.          break;
  176.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  177.          *params = INT_TO_BOOL(ctx->ClientAttribStackDepth);
  178.          break;
  179.       case GL_CLIP_PLANE0:
  180.       case GL_CLIP_PLANE1:
  181.       case GL_CLIP_PLANE2:
  182.       case GL_CLIP_PLANE3:
  183.       case GL_CLIP_PLANE4:
  184.       case GL_CLIP_PLANE5:
  185.          *params = ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  186.          break;
  187.       case GL_COLOR_CLEAR_VALUE:
  188.          params[0] = FLOAT_TO_BOOL(ctx->Color.ClearColor[0]);
  189.          params[1] = FLOAT_TO_BOOL(ctx->Color.ClearColor[1]);
  190.          params[2] = FLOAT_TO_BOOL(ctx->Color.ClearColor[2]);
  191.          params[3] = FLOAT_TO_BOOL(ctx->Color.ClearColor[3]);
  192.          break;
  193.       case GL_COLOR_MATERIAL:
  194.          *params = ctx->Light.ColorMaterialEnabled;
  195.          break;
  196.       case GL_COLOR_MATERIAL_FACE:
  197.          *params = ENUM_TO_BOOL(ctx->Light.ColorMaterialFace);
  198.          break;
  199.       case GL_COLOR_MATERIAL_PARAMETER:
  200.          *params = ENUM_TO_BOOL(ctx->Light.ColorMaterialMode);
  201.          break;
  202.       case GL_COLOR_WRITEMASK:
  203.          params[0] = (ctx->Color.ColorMask & 8) ? GL_TRUE : GL_FALSE;
  204.          params[1] = (ctx->Color.ColorMask & 4) ? GL_TRUE : GL_FALSE;
  205.          params[2] = (ctx->Color.ColorMask & 2) ? GL_TRUE : GL_FALSE;
  206.          params[3] = (ctx->Color.ColorMask & 1) ? GL_TRUE : GL_FALSE;
  207.          break;
  208.       case GL_CULL_FACE:
  209.          *params = ctx->Polygon.CullFlag;
  210.          break;
  211.       case GL_CULL_FACE_MODE:
  212.          *params = ENUM_TO_BOOL(ctx->Polygon.CullFaceMode);
  213.          break;
  214.       case GL_CURRENT_COLOR:
  215.          params[0] = INT_TO_BOOL(ctx->Current.IntColor[0]);
  216.          params[1] = INT_TO_BOOL(ctx->Current.IntColor[1]);
  217.          params[2] = INT_TO_BOOL(ctx->Current.IntColor[2]);
  218.          params[3] = INT_TO_BOOL(ctx->Current.IntColor[3]);
  219.          break;
  220.       case GL_CURRENT_INDEX:
  221.          *params = INT_TO_BOOL(ctx->Current.Index);
  222.          break;
  223.       case GL_CURRENT_NORMAL:
  224.          params[0] = FLOAT_TO_BOOL(ctx->Current.Normal[0]);
  225.          params[1] = FLOAT_TO_BOOL(ctx->Current.Normal[1]);
  226.          params[2] = FLOAT_TO_BOOL(ctx->Current.Normal[2]);
  227.          break;
  228.       case GL_CURRENT_RASTER_COLOR:
  229.      params[0] = FLOAT_TO_BOOL(ctx->Current.RasterColor[0]);
  230.      params[1] = FLOAT_TO_BOOL(ctx->Current.RasterColor[1]);
  231.      params[2] = FLOAT_TO_BOOL(ctx->Current.RasterColor[2]);
  232.      params[3] = FLOAT_TO_BOOL(ctx->Current.RasterColor[3]);
  233.      break;
  234.       case GL_CURRENT_RASTER_DISTANCE:
  235.      *params = FLOAT_TO_BOOL(ctx->Current.RasterDistance);
  236.      break;
  237.       case GL_CURRENT_RASTER_INDEX:
  238.      *params = FLOAT_TO_BOOL(ctx->Current.RasterIndex);
  239.      break;
  240.       case GL_CURRENT_RASTER_POSITION:
  241.      params[0] = FLOAT_TO_BOOL(ctx->Current.RasterPos[0]);
  242.      params[1] = FLOAT_TO_BOOL(ctx->Current.RasterPos[1]);
  243.      params[2] = FLOAT_TO_BOOL(ctx->Current.RasterPos[2]);
  244.      params[3] = FLOAT_TO_BOOL(ctx->Current.RasterPos[3]);
  245.      break;
  246.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  247.          params[0] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[0]);
  248.          params[1] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[1]);
  249.          params[2] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[2]);
  250.          params[3] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[3]);
  251.      break;
  252.       case GL_CURRENT_RASTER_POSITION_VALID:
  253.          *params = ctx->Current.RasterPosValid;
  254.      break;
  255.       case GL_CURRENT_TEXTURE_COORDS:
  256.          params[0] = FLOAT_TO_BOOL(ctx->Current.TexCoord[0]);
  257.          params[1] = FLOAT_TO_BOOL(ctx->Current.TexCoord[1]);
  258.          params[2] = FLOAT_TO_BOOL(ctx->Current.TexCoord[2]);
  259.          params[3] = FLOAT_TO_BOOL(ctx->Current.TexCoord[3]);
  260.      break;
  261.       case GL_DEPTH_BIAS:
  262.          *params = FLOAT_TO_BOOL(ctx->Pixel.DepthBias);
  263.      break;
  264.       case GL_DEPTH_BITS:
  265.      *params = INT_TO_BOOL(8*sizeof(GLdepth));
  266.      break;
  267.       case GL_DEPTH_CLEAR_VALUE:
  268.          *params = FLOAT_TO_BOOL(ctx->Depth.Clear);
  269.      break;
  270.       case GL_DEPTH_FUNC:
  271.          *params = ENUM_TO_BOOL(ctx->Depth.Func);
  272.      break;
  273.       case GL_DEPTH_RANGE:
  274.          params[0] = FLOAT_TO_BOOL(ctx->Viewport.Near);
  275.          params[1] = FLOAT_TO_BOOL(ctx->Viewport.Far);
  276.      break;
  277.       case GL_DEPTH_SCALE:
  278.          *params = FLOAT_TO_BOOL(ctx->Pixel.DepthScale);
  279.      break;
  280.       case GL_DEPTH_TEST:
  281.          *params = ctx->Depth.Test;
  282.      break;
  283.       case GL_DEPTH_WRITEMASK:
  284.      *params = ctx->Depth.Mask;
  285.      break;
  286.       case GL_DITHER:
  287.      *params = ctx->Color.DitherFlag;
  288.      break;
  289.       case GL_DOUBLEBUFFER:
  290.      *params = ctx->Visual->DBflag;
  291.      break;
  292.       case GL_DRAW_BUFFER:
  293.      *params = ENUM_TO_BOOL(ctx->Color.DrawBuffer);
  294.      break;
  295.       case GL_EDGE_FLAG:
  296.      *params = ctx->Current.EdgeFlag;
  297.      break;
  298.       case GL_FEEDBACK_BUFFER_SIZE:
  299.          /* TODO: is this right?  Or, return number of entries in buffer? */
  300.          *params = INT_TO_BOOL(ctx->Feedback.BufferSize);
  301.          break;
  302.       case GL_FEEDBACK_BUFFER_TYPE:
  303.          *params = INT_TO_BOOL(ctx->Feedback.Type);
  304.          break;
  305.       case GL_FOG:
  306.      *params = ctx->Fog.Enabled;
  307.      break;
  308.       case GL_FOG_COLOR:
  309.          params[0] = FLOAT_TO_BOOL(ctx->Fog.Color[0]);
  310.          params[1] = FLOAT_TO_BOOL(ctx->Fog.Color[1]);
  311.          params[2] = FLOAT_TO_BOOL(ctx->Fog.Color[2]);
  312.          params[3] = FLOAT_TO_BOOL(ctx->Fog.Color[3]);
  313.      break;
  314.       case GL_FOG_DENSITY:
  315.          *params = FLOAT_TO_BOOL(ctx->Fog.Density);
  316.      break;
  317.       case GL_FOG_END:
  318.          *params = FLOAT_TO_BOOL(ctx->Fog.End);
  319.      break;
  320.       case GL_FOG_HINT:
  321.      *params = ENUM_TO_BOOL(ctx->Hint.Fog);
  322.      break;
  323.       case GL_FOG_INDEX:
  324.      *params = FLOAT_TO_BOOL(ctx->Fog.Index);
  325.      break;
  326.       case GL_FOG_MODE:
  327.      *params = ENUM_TO_BOOL(ctx->Fog.Mode);
  328.      break;
  329.       case GL_FOG_START:
  330.          *params = FLOAT_TO_BOOL(ctx->Fog.End);
  331.      break;
  332.       case GL_FRONT_FACE:
  333.      *params = ENUM_TO_BOOL(ctx->Polygon.FrontFace);
  334.      break;
  335.       case GL_GREEN_BIAS:
  336.          *params = FLOAT_TO_BOOL(ctx->Pixel.GreenBias);
  337.      break;
  338.       case GL_GREEN_BITS:
  339.          *params = INT_TO_BOOL( bits( ctx->Visual->GreenScale ) );
  340.      break;
  341.       case GL_GREEN_SCALE:
  342.          *params = FLOAT_TO_BOOL(ctx->Pixel.GreenScale);
  343.      break;
  344.       case GL_INDEX_BITS:
  345.          *params = INT_TO_BOOL( ctx->Visual->IndexBits );
  346.      break;
  347.       case GL_INDEX_CLEAR_VALUE:
  348.      *params = INT_TO_BOOL(ctx->Color.ClearIndex);
  349.      break;
  350.       case GL_INDEX_MODE:
  351.      *params = ctx->Visual->RGBAflag ? GL_FALSE : GL_TRUE;
  352.      break;
  353.       case GL_INDEX_OFFSET:
  354.      *params = INT_TO_BOOL(ctx->Pixel.IndexOffset);
  355.      break;
  356.       case GL_INDEX_SHIFT:
  357.      *params = INT_TO_BOOL(ctx->Pixel.IndexShift);
  358.      break;
  359.       case GL_INDEX_WRITEMASK:
  360.      *params = INT_TO_BOOL(ctx->Color.IndexMask);
  361.      break;
  362.       case GL_LIGHT0:
  363.       case GL_LIGHT1:
  364.       case GL_LIGHT2:
  365.       case GL_LIGHT3:
  366.       case GL_LIGHT4:
  367.       case GL_LIGHT5:
  368.       case GL_LIGHT6:
  369.       case GL_LIGHT7:
  370.      *params = ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  371.      break;
  372.       case GL_LIGHTING:
  373.      *params = ctx->Light.Enabled;
  374.      break;
  375.       case GL_LIGHT_MODEL_AMBIENT:
  376.      params[0] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[0]);
  377.      params[1] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[1]);
  378.      params[2] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[2]);
  379.      params[3] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[3]);
  380.      break;
  381.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  382.      *params = ctx->Light.Model.LocalViewer;
  383.      break;
  384.       case GL_LIGHT_MODEL_TWO_SIDE:
  385.      *params = ctx->Light.Model.TwoSide;
  386.      break;
  387.       case GL_LINE_SMOOTH:
  388.      *params = ctx->Line.SmoothFlag;
  389.      break;
  390.       case GL_LINE_SMOOTH_HINT:
  391.      *params = ENUM_TO_BOOL(ctx->Hint.LineSmooth);
  392.      break;
  393.       case GL_LINE_STIPPLE:
  394.      *params = ctx->Line.StippleFlag;
  395.      break;
  396.       case GL_LINE_STIPPLE_PATTERN:
  397.      *params = INT_TO_BOOL(ctx->Line.StipplePattern);
  398.      break;
  399.       case GL_LINE_STIPPLE_REPEAT:
  400.      *params = INT_TO_BOOL(ctx->Line.StippleFactor);
  401.      break;
  402.       case GL_LINE_WIDTH:
  403.      *params = FLOAT_TO_BOOL(ctx->Line.Width);
  404.      break;
  405.       case GL_LINE_WIDTH_GRANULARITY:
  406.      *params = FLOAT_TO_BOOL(LINE_WIDTH_GRANULARITY);
  407.      break;
  408.       case GL_LINE_WIDTH_RANGE:
  409.      params[0] = FLOAT_TO_BOOL(MIN_LINE_WIDTH);
  410.      params[1] = FLOAT_TO_BOOL(MAX_LINE_WIDTH);
  411.      break;
  412.       case GL_LIST_BASE:
  413.      *params = INT_TO_BOOL(ctx->List.ListBase);
  414.      break;
  415.       case GL_LIST_INDEX:
  416.      *params = INT_TO_BOOL( gl_list_index() );
  417.      break;
  418.       case GL_LIST_MODE:
  419.      *params = ENUM_TO_BOOL( ctx->ExecuteFlag
  420.                   ? GL_COMPILE_AND_EXECUTE : GL_COMPILE );
  421.      break;
  422.       case GL_INDEX_LOGIC_OP:
  423.      *params = ctx->Color.IndexLogicOpEnabled;
  424.      break;
  425.       case GL_COLOR_LOGIC_OP:
  426.      *params = ctx->Color.ColorLogicOpEnabled;
  427.      break;
  428.       case GL_LOGIC_OP_MODE:
  429.      *params = ENUM_TO_BOOL(ctx->Color.LogicOp);
  430.      break;
  431.       case GL_MAP1_COLOR_4:
  432.      *params = ctx->Eval.Map1Color4;
  433.      break;
  434.       case GL_MAP1_GRID_DOMAIN:
  435.      params[0] = FLOAT_TO_BOOL(ctx->Eval.MapGrid1u1);
  436.      params[1] = FLOAT_TO_BOOL(ctx->Eval.MapGrid1u2);
  437.      break;
  438.       case GL_MAP1_GRID_SEGMENTS:
  439.      *params = INT_TO_BOOL(ctx->Eval.MapGrid1un);
  440.      break;
  441.       case GL_MAP1_INDEX:
  442.      *params = ctx->Eval.Map1Index;
  443.      break;
  444.       case GL_MAP1_NORMAL:
  445.      *params = ctx->Eval.Map1Normal;
  446.      break;
  447.       case GL_MAP1_TEXTURE_COORD_1:
  448.      *params = ctx->Eval.Map1TextureCoord1;
  449.      break;
  450.       case GL_MAP1_TEXTURE_COORD_2:
  451.      *params = ctx->Eval.Map1TextureCoord2;
  452.      break;
  453.       case GL_MAP1_TEXTURE_COORD_3:
  454.      *params = ctx->Eval.Map1TextureCoord3;
  455.      break;
  456.       case GL_MAP1_TEXTURE_COORD_4:
  457.      *params = ctx->Eval.Map1TextureCoord4;
  458.      break;
  459.       case GL_MAP1_VERTEX_3:
  460.      *params = ctx->Eval.Map1Vertex3;
  461.      break;
  462.       case GL_MAP1_VERTEX_4:
  463.      *params = ctx->Eval.Map1Vertex4;
  464.      break;
  465.       case GL_MAP2_COLOR_4:
  466.      *params = ctx->Eval.Map2Color4;
  467.      break;
  468.       case GL_MAP2_GRID_DOMAIN:
  469.      params[0] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2u1);
  470.      params[1] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2u2);
  471.      params[2] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2v1);
  472.      params[3] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2v2);
  473.      break;
  474.       case GL_MAP2_GRID_SEGMENTS:
  475.      params[0] = INT_TO_BOOL(ctx->Eval.MapGrid2un);
  476.      params[1] = INT_TO_BOOL(ctx->Eval.MapGrid2vn);
  477.      break;
  478.       case GL_MAP2_INDEX:
  479.      *params = ctx->Eval.Map2Index;
  480.      break;
  481.       case GL_MAP2_NORMAL:
  482.      *params = ctx->Eval.Map2Normal;
  483.      break;
  484.       case GL_MAP2_TEXTURE_COORD_1:
  485.      *params = ctx->Eval.Map2TextureCoord1;
  486.      break;
  487.       case GL_MAP2_TEXTURE_COORD_2:
  488.      *params = ctx->Eval.Map2TextureCoord2;
  489.      break;
  490.       case GL_MAP2_TEXTURE_COORD_3:
  491.      *params = ctx->Eval.Map2TextureCoord3;
  492.      break;
  493.       case GL_MAP2_TEXTURE_COORD_4:
  494.      *params = ctx->Eval.Map2TextureCoord4;
  495.      break;
  496.       case GL_MAP2_VERTEX_3:
  497.      *params = ctx->Eval.Map2Vertex3;
  498.      break;
  499.       case GL_MAP2_VERTEX_4:
  500.      *params = ctx->Eval.Map2Vertex4;
  501.      break;
  502.       case GL_MAP_COLOR:
  503.      *params = ctx->Pixel.MapColorFlag;
  504.      break;
  505.       case GL_MAP_STENCIL:
  506.      *params = ctx->Pixel.MapStencilFlag;
  507.      break;
  508.       case GL_MATRIX_MODE:
  509.      *params = ENUM_TO_BOOL( ctx->Transform.MatrixMode );
  510.      break;
  511.       case GL_MAX_ATTRIB_STACK_DEPTH:
  512.      *params = INT_TO_BOOL(MAX_ATTRIB_STACK_DEPTH);
  513.      break;
  514.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  515.          *params = INT_TO_BOOL( MAX_CLIENT_ATTRIB_STACK_DEPTH);
  516.          break;
  517.       case GL_MAX_CLIP_PLANES:
  518.      *params = INT_TO_BOOL(MAX_CLIP_PLANES);
  519.      break;
  520.       case GL_MAX_EVAL_ORDER:
  521.      *params = INT_TO_BOOL(MAX_EVAL_ORDER);
  522.      break;
  523.       case GL_MAX_LIGHTS:
  524.      *params = INT_TO_BOOL(MAX_LIGHTS);
  525.      break;
  526.       case GL_MAX_LIST_NESTING:
  527.      *params = INT_TO_BOOL(MAX_LIST_NESTING);
  528.      break;
  529.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  530.      *params = INT_TO_BOOL(MAX_MODELVIEW_STACK_DEPTH);
  531.      break;
  532.       case GL_MAX_NAME_STACK_DEPTH:
  533.      *params = INT_TO_BOOL(MAX_NAME_STACK_DEPTH);
  534.      break;
  535.       case GL_MAX_PIXEL_MAP_TABLE:
  536.      *params = INT_TO_BOOL(MAX_PIXEL_MAP_TABLE);
  537.      break;
  538.       case GL_MAX_PROJECTION_STACK_DEPTH:
  539.      *params = INT_TO_BOOL(MAX_PROJECTION_STACK_DEPTH);
  540.      break;
  541.       case GL_MAX_TEXTURE_SIZE:
  542.      *params = INT_TO_BOOL(MAX_TEXTURE_SIZE);
  543.      break;
  544.       case GL_MAX_TEXTURE_STACK_DEPTH:
  545.      *params = INT_TO_BOOL(MAX_TEXTURE_STACK_DEPTH);
  546.      break;
  547.       case GL_MAX_VIEWPORT_DIMS:
  548.      params[0] = INT_TO_BOOL(MAX_WIDTH);
  549.      params[1] = INT_TO_BOOL(MAX_HEIGHT);
  550.      break;
  551.       case GL_MODELVIEW_MATRIX:
  552.      for (i=0;i<16;i++) {
  553.         params[i] = FLOAT_TO_BOOL(ctx->ModelViewMatrix[i]);
  554.      }
  555.      break;
  556.       case GL_MODELVIEW_STACK_DEPTH:
  557.      *params = INT_TO_BOOL(ctx->ModelViewStackDepth);
  558.      break;
  559.       case GL_NAME_STACK_DEPTH:
  560.      *params = INT_TO_BOOL(ctx->Select.NameStackDepth);
  561.      break;
  562.       case GL_NORMALIZE:
  563.      *params = ctx->Transform.Normalize;
  564.      break;
  565.       case GL_PACK_ALIGNMENT:
  566.      *params = INT_TO_BOOL(ctx->Pack.Alignment);
  567.      break;
  568.       case GL_PACK_LSB_FIRST:
  569.      *params = ctx->Pack.LsbFirst;
  570.      break;
  571.       case GL_PACK_ROW_LENGTH:
  572.      *params = INT_TO_BOOL(ctx->Pack.RowLength);
  573.      break;
  574.       case GL_PACK_SKIP_PIXELS:
  575.      *params = INT_TO_BOOL(ctx->Pack.SkipPixels);
  576.      break;
  577.       case GL_PACK_SKIP_ROWS:
  578.      *params = INT_TO_BOOL(ctx->Pack.SkipRows);
  579.      break;
  580.       case GL_PACK_SWAP_BYTES:
  581.      *params = ctx->Pack.SwapBytes;
  582.      break;
  583.       case GL_PACK_SKIP_IMAGES_EXT:
  584.          *params = ctx->Pack.SkipImages;
  585.          break;
  586.       case GL_PACK_IMAGE_HEIGHT_EXT:
  587.          *params = ctx->Pack.ImageHeight;
  588.          break;
  589.       case GL_PERSPECTIVE_CORRECTION_HINT:
  590.      *params = ENUM_TO_BOOL(ctx->Hint.PerspectiveCorrection);
  591.      break;
  592.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  593.      *params = INT_TO_BOOL(ctx->Pixel.MapAtoAsize);
  594.      break;
  595.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  596.      *params = INT_TO_BOOL(ctx->Pixel.MapBtoBsize);
  597.      break;
  598.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  599.      *params = INT_TO_BOOL(ctx->Pixel.MapGtoGsize);
  600.      break;
  601.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  602.      *params = INT_TO_BOOL(ctx->Pixel.MapItoAsize);
  603.      break;
  604.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  605.      *params = INT_TO_BOOL(ctx->Pixel.MapItoBsize);
  606.      break;
  607.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  608.      *params = INT_TO_BOOL(ctx->Pixel.MapItoGsize);
  609.      break;
  610.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  611.      *params = INT_TO_BOOL(ctx->Pixel.MapItoIsize);
  612.      break;
  613.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  614.      *params = INT_TO_BOOL(ctx->Pixel.MapItoRsize);
  615.      break;
  616.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  617.      *params = INT_TO_BOOL(ctx->Pixel.MapRtoRsize);
  618.      break;
  619.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  620.      *params = INT_TO_BOOL(ctx->Pixel.MapStoSsize);
  621.      break;
  622.       case GL_POINT_SIZE:
  623.      *params = FLOAT_TO_BOOL(ctx->Point.Size );
  624.      break;
  625.       case GL_POINT_SIZE_GRANULARITY:
  626.      *params = FLOAT_TO_BOOL(POINT_SIZE_GRANULARITY );
  627.      break;
  628.       case GL_POINT_SIZE_RANGE:
  629.      params[0] = FLOAT_TO_BOOL(MIN_POINT_SIZE );
  630.      params[1] = FLOAT_TO_BOOL(MAX_POINT_SIZE );
  631.      break;
  632.       case GL_POINT_SMOOTH:
  633.      *params = ctx->Point.SmoothFlag;
  634.      break;
  635.       case GL_POINT_SMOOTH_HINT:
  636.      *params = ENUM_TO_BOOL(ctx->Hint.PointSmooth);
  637.      break;
  638.       case GL_POLYGON_MODE:
  639.      params[0] = ENUM_TO_BOOL(ctx->Polygon.FrontMode);
  640.      params[1] = ENUM_TO_BOOL(ctx->Polygon.BackMode);
  641.      break;
  642. #ifdef GL_EXT_polygon_offset
  643.       case GL_POLYGON_OFFSET_BIAS_EXT:
  644.          *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetUnits );
  645.          break;
  646. #endif
  647.       case GL_POLYGON_OFFSET_FACTOR:
  648.          *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetFactor );
  649.          break;
  650.       case GL_POLYGON_OFFSET_UNITS:
  651.          *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetUnits );
  652.          break;
  653.       case GL_POLYGON_SMOOTH:
  654.      *params = ctx->Polygon.SmoothFlag;
  655.      break;
  656.       case GL_POLYGON_SMOOTH_HINT:
  657.      *params = ENUM_TO_BOOL(ctx->Hint.PolygonSmooth);
  658.      break;
  659.       case GL_POLYGON_STIPPLE:
  660.      *params = ctx->Polygon.StippleFlag;
  661.      break;
  662.       case GL_PROJECTION_MATRIX:
  663.      for (i=0;i<16;i++) {
  664.         params[i] = FLOAT_TO_BOOL(ctx->ProjectionMatrix[i]);
  665.      }
  666.      break;
  667.       case GL_PROJECTION_STACK_DEPTH:
  668.      *params = INT_TO_BOOL(ctx->ProjectionStackDepth);
  669.      break;
  670.       case GL_READ_BUFFER:
  671.      *params = ENUM_TO_BOOL(ctx->Pixel.ReadBuffer);
  672.      break;
  673.       case GL_RED_BIAS:
  674.          *params = FLOAT_TO_BOOL(ctx->Pixel.RedBias);
  675.      break;
  676.       case GL_RED_BITS:
  677.          *params = INT_TO_BOOL( bits( ctx->Visual->RedScale ) );
  678.      break;
  679.       case GL_RED_SCALE:
  680.          *params = FLOAT_TO_BOOL(ctx->Pixel.RedScale);
  681.      break;
  682.       case GL_RENDER_MODE:
  683.      *params = ENUM_TO_BOOL(ctx->RenderMode);
  684.      break;
  685.       case GL_RGBA_MODE:
  686.          *params = ctx->Visual->RGBAflag;
  687.      break;
  688.       case GL_SCISSOR_BOX:
  689.      params[0] = INT_TO_BOOL(ctx->Scissor.X);
  690.      params[1] = INT_TO_BOOL(ctx->Scissor.Y);
  691.      params[2] = INT_TO_BOOL(ctx->Scissor.Width);
  692.      params[3] = INT_TO_BOOL(ctx->Scissor.Height);
  693.      break;
  694.       case GL_SCISSOR_TEST:
  695.      *params = ctx->Scissor.Enabled;
  696.      break;
  697.       case GL_SHADE_MODEL:
  698.      *params = ENUM_TO_BOOL(ctx->Light.ShadeModel);
  699.      break;
  700.       case GL_STENCIL_BITS:
  701.      *params = INT_TO_BOOL(8*sizeof(GLstencil));
  702.      break;
  703.       case GL_STENCIL_CLEAR_VALUE:
  704.      *params = INT_TO_BOOL(ctx->Stencil.Clear);
  705.      break;
  706.       case GL_STENCIL_FAIL:
  707.      *params = ENUM_TO_BOOL(ctx->Stencil.FailFunc);
  708.      break;
  709.       case GL_STENCIL_FUNC:
  710.      *params = ENUM_TO_BOOL(ctx->Stencil.Function);
  711.      break;
  712.       case GL_STENCIL_PASS_DEPTH_FAIL:
  713.      *params = ENUM_TO_BOOL(ctx->Stencil.ZFailFunc);
  714.      break;
  715.       case GL_STENCIL_PASS_DEPTH_PASS:
  716.      *params = ENUM_TO_BOOL(ctx->Stencil.ZPassFunc);
  717.      break;
  718.       case GL_STENCIL_REF:
  719.      *params = INT_TO_BOOL(ctx->Stencil.Ref);
  720.      break;
  721.       case GL_STENCIL_TEST:
  722.      *params = ctx->Stencil.Enabled;
  723.      break;
  724.       case GL_STENCIL_VALUE_MASK:
  725.      *params = INT_TO_BOOL(ctx->Stencil.ValueMask);
  726.      break;
  727.       case GL_STENCIL_WRITEMASK:
  728.      *params = INT_TO_BOOL(ctx->Stencil.WriteMask);
  729.      break;
  730.       case GL_STEREO:
  731.      *params = GL_FALSE;    /* TODO */
  732.      break;
  733.       case GL_SUBPIXEL_BITS:
  734.      *params = INT_TO_BOOL(0);  /* TODO */
  735.      break;
  736.       case GL_TEXTURE_1D:
  737.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? GL_TRUE : GL_FALSE;
  738.      break;
  739.       case GL_TEXTURE_2D:
  740.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? GL_TRUE : GL_FALSE;
  741.      break;
  742.       case GL_TEXTURE_3D_EXT:
  743.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? GL_TRUE : GL_FALSE;
  744.      break;
  745.       case GL_TEXTURE_ENV_COLOR:
  746.      params[0] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[0]);
  747.      params[1] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[1]);
  748.      params[2] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[2]);
  749.      params[3] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[3]);
  750.      break;
  751.       case GL_TEXTURE_ENV_MODE:
  752.      *params = ENUM_TO_BOOL(ctx->Texture.EnvMode);
  753.      break;
  754.       case GL_TEXTURE_GEN_S:
  755.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? GL_TRUE : GL_FALSE;
  756.      break;
  757.       case GL_TEXTURE_GEN_T:
  758.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? GL_TRUE : GL_FALSE;
  759.      break;
  760.       case GL_TEXTURE_GEN_R:
  761.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? GL_TRUE : GL_FALSE;
  762.      break;
  763.       case GL_TEXTURE_GEN_Q:
  764.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? GL_TRUE : GL_FALSE;
  765.      break;
  766.       case GL_TEXTURE_MATRIX:
  767.      for (i=0;i<16;i++) {
  768.         params[i] = FLOAT_TO_BOOL(ctx->TextureMatrix[i]);
  769.      }
  770.      break;
  771.       case GL_TEXTURE_STACK_DEPTH:
  772.      *params = INT_TO_BOOL(ctx->TextureStackDepth);
  773.      break;
  774.       case GL_UNPACK_ALIGNMENT:
  775.      *params = INT_TO_BOOL(ctx->Unpack.Alignment);
  776.      break;
  777.       case GL_UNPACK_LSB_FIRST:
  778.      *params = ctx->Unpack.LsbFirst;
  779.      break;
  780.       case GL_UNPACK_ROW_LENGTH:
  781.      *params = INT_TO_BOOL(ctx->Unpack.RowLength);
  782.      break;
  783.       case GL_UNPACK_SKIP_PIXELS:
  784.      *params = INT_TO_BOOL(ctx->Unpack.SkipPixels);
  785.      break;
  786.       case GL_UNPACK_SKIP_ROWS:
  787.      *params = INT_TO_BOOL(ctx->Unpack.SkipRows);
  788.      break;
  789.       case GL_UNPACK_SWAP_BYTES:
  790.      *params = ctx->Unpack.SwapBytes;
  791.      break;
  792.       case GL_UNPACK_SKIP_IMAGES_EXT:
  793.          *params = ctx->Unpack.SkipImages;
  794.          break;
  795.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  796.          *params = ctx->Unpack.ImageHeight;
  797.          break;
  798.       case GL_VIEWPORT:
  799.      params[0] = INT_TO_BOOL(ctx->Viewport.X);
  800.      params[1] = INT_TO_BOOL(ctx->Viewport.Y);
  801.      params[2] = INT_TO_BOOL(ctx->Viewport.Width);
  802.      params[3] = INT_TO_BOOL(ctx->Viewport.Height);
  803.      break;
  804.       case GL_ZOOM_X:
  805.      *params = FLOAT_TO_BOOL(ctx->Pixel.ZoomX);
  806.      break;
  807.       case GL_ZOOM_Y:
  808.      *params = FLOAT_TO_BOOL(ctx->Pixel.ZoomY);
  809.      break;
  810.       case GL_VERTEX_ARRAY_SIZE:
  811.          *params = INT_TO_BOOL(ctx->Array.VertexSize);
  812.          break;
  813.       case GL_VERTEX_ARRAY_TYPE:
  814.          *params = ENUM_TO_BOOL(ctx->Array.VertexType);
  815.          break;
  816.       case GL_VERTEX_ARRAY_STRIDE:
  817.          *params = INT_TO_BOOL(ctx->Array.VertexStride);
  818.          break;
  819.       case GL_VERTEX_ARRAY_COUNT_EXT:
  820.          *params = INT_TO_BOOL(0);
  821.          break;
  822.       case GL_NORMAL_ARRAY_TYPE:
  823.          *params = ENUM_TO_BOOL(ctx->Array.NormalType);
  824.          break;
  825.       case GL_NORMAL_ARRAY_STRIDE:
  826.          *params = INT_TO_BOOL(ctx->Array.NormalStride);
  827.          break;
  828.       case GL_NORMAL_ARRAY_COUNT_EXT:
  829.          *params = INT_TO_BOOL(0);
  830.          break;
  831.       case GL_COLOR_ARRAY_SIZE:
  832.          *params = INT_TO_BOOL(ctx->Array.ColorSize);
  833.          break;
  834.       case GL_COLOR_ARRAY_TYPE:
  835.          *params = ENUM_TO_BOOL(ctx->Array.ColorType);
  836.          break;
  837.       case GL_COLOR_ARRAY_STRIDE:
  838.          *params = INT_TO_BOOL(ctx->Array.ColorStride);
  839.          break;
  840.       case GL_COLOR_ARRAY_COUNT_EXT:
  841.          *params = INT_TO_BOOL(0);
  842.          break;
  843.       case GL_INDEX_ARRAY_TYPE:
  844.          *params = ENUM_TO_BOOL(ctx->Array.IndexType);
  845.          break;
  846.       case GL_INDEX_ARRAY_STRIDE:
  847.          *params = INT_TO_BOOL(ctx->Array.IndexStride);
  848.          break;
  849.       case GL_INDEX_ARRAY_COUNT_EXT:
  850.          *params = INT_TO_BOOL(0);
  851.          break;
  852.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  853.          *params = INT_TO_BOOL(ctx->Array.TexCoordSize);
  854.          break;
  855.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  856.          *params = ENUM_TO_BOOL(ctx->Array.TexCoordType);
  857.          break;
  858.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  859.          *params = INT_TO_BOOL(ctx->Array.TexCoordStride);
  860.          break;
  861.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  862.          *params = INT_TO_BOOL(0);
  863.          break;
  864.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  865.          *params = INT_TO_BOOL(ctx->Array.EdgeFlagStride);
  866.          break;
  867.       case GL_EDGE_FLAG_ARRAY_EXT:
  868.          *params = INT_TO_BOOL(0);
  869.          break;
  870.       case GL_TEXTURE_BINDING_1D:
  871.          *params = INT_TO_BOOL(ctx->Texture.Current1D->Name);
  872.           break;
  873.       case GL_TEXTURE_BINDING_2D:
  874.          *params = INT_TO_BOOL(ctx->Texture.Current2D->Name);
  875.           break;
  876.       case GL_TEXTURE_3D_BINDING_EXT:
  877.          *params = INT_TO_BOOL(ctx->Texture.Current2D->Name);
  878.           break;
  879.       default:
  880.          gl_error( ctx, GL_INVALID_ENUM, "glGetBooleanv" );
  881.    }
  882. }
  883.  
  884.  
  885.  
  886.  
  887. void gl_GetDoublev( GLcontext *ctx, GLenum pname, GLdouble *params )
  888. {
  889.    GLuint i;
  890.  
  891.    if (INSIDE_BEGIN_END(ctx)) {
  892.       gl_error( ctx, GL_INVALID_OPERATION, "glGetDoublev" );
  893.       return;
  894.    }
  895.  
  896.    switch (pname) {
  897.       case GL_ACCUM_RED_BITS:
  898.       case GL_ACCUM_GREEN_BITS:
  899.       case GL_ACCUM_BLUE_BITS:
  900.       case GL_ACCUM_ALPHA_BITS:
  901.          *params = (GLdouble) (sizeof(GLaccum)*8);
  902.          break;
  903.       case GL_ACCUM_CLEAR_VALUE:
  904.          params[0] = (GLdouble) ctx->Accum.ClearColor[0];
  905.          params[1] = (GLdouble) ctx->Accum.ClearColor[1];
  906.          params[2] = (GLdouble) ctx->Accum.ClearColor[2];
  907.          params[3] = (GLdouble) ctx->Accum.ClearColor[3];
  908.          break;
  909.       case GL_ALPHA_BIAS:
  910.          *params = (GLdouble) ctx->Pixel.AlphaBias;
  911.          break;
  912.       case GL_ALPHA_BITS:
  913.          if (ctx->Visual->FrontAlphaEnabled || ctx->Visual->BackAlphaEnabled) {
  914.             *params = 8*sizeof(GLubyte);
  915.          }
  916.          else {
  917.             *params = 0.0;
  918.          }
  919.          break;
  920.       case GL_ALPHA_SCALE:
  921.          *params = (GLdouble) ctx->Pixel.AlphaScale;
  922.          break;
  923.       case GL_ALPHA_TEST:
  924.          *params = (GLdouble) ctx->Color.AlphaEnabled;
  925.          break;
  926.       case GL_ALPHA_TEST_FUNC:
  927.          *params = (GLdouble) ctx->Color.AlphaFunc;
  928.          break;
  929.       case GL_ALPHA_TEST_REF:
  930.          *params = (GLdouble) ctx->Color.AlphaRef;
  931.          break;
  932.       case GL_ATTRIB_STACK_DEPTH:
  933.          *params = (GLdouble ) ctx->AttribStackDepth;
  934.          break;
  935.       case GL_AUTO_NORMAL:
  936.          *params = (GLdouble) ctx->Eval.AutoNormal;
  937.          break;
  938.       case GL_AUX_BUFFERS:
  939.          *params = (GLdouble) NUM_AUX_BUFFERS;
  940.          break;
  941.       case GL_BLEND:
  942.          *params = (GLdouble) ctx->Color.BlendEnabled;
  943.          break;
  944.       case GL_BLEND_DST:
  945.          *params = (GLdouble) ctx->Color.BlendDst;
  946.          break;
  947.       case GL_BLEND_SRC:
  948.          *params = (GLdouble) ctx->Color.BlendSrc;
  949.          break;
  950.       case GL_BLEND_EQUATION_EXT:
  951.      *params = (GLdouble) ctx->Color.BlendEquation;
  952.      break;
  953.       case GL_BLEND_COLOR_EXT:
  954.      params[0] = (GLdouble) ctx->Color.BlendColor[0];
  955.      params[1] = (GLdouble) ctx->Color.BlendColor[1];
  956.      params[2] = (GLdouble) ctx->Color.BlendColor[2];
  957.      params[3] = (GLdouble) ctx->Color.BlendColor[3];
  958.      break;
  959.       case GL_BLUE_BIAS:
  960.          *params = (GLdouble) ctx->Pixel.BlueBias;
  961.          break;
  962.       case GL_BLUE_BITS:
  963.          *params = (GLdouble) bits( ctx->Visual->BlueScale );
  964.          break;
  965.       case GL_BLUE_SCALE:
  966.          *params = (GLdouble) ctx->Pixel.BlueScale;
  967.          break;
  968.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  969.          *params = (GLdouble) ctx->ClientAttribStackDepth;
  970.          break;
  971.       case GL_CLIP_PLANE0:
  972.       case GL_CLIP_PLANE1:
  973.       case GL_CLIP_PLANE2:
  974.       case GL_CLIP_PLANE3:
  975.       case GL_CLIP_PLANE4:
  976.       case GL_CLIP_PLANE5:
  977.          *params = (GLdouble) ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  978.          break;
  979.       case GL_COLOR_CLEAR_VALUE:
  980.          params[0] = (GLdouble) ctx->Color.ClearColor[0];
  981.          params[1] = (GLdouble) ctx->Color.ClearColor[1];
  982.          params[2] = (GLdouble) ctx->Color.ClearColor[2];
  983.          params[3] = (GLdouble) ctx->Color.ClearColor[3];
  984.          break;
  985.       case GL_COLOR_MATERIAL:
  986.          *params = (GLdouble) ctx->Light.ColorMaterialEnabled;
  987.          break;
  988.       case GL_COLOR_MATERIAL_FACE:
  989.          *params = (GLdouble) ctx->Light.ColorMaterialFace;
  990.          break;
  991.       case GL_COLOR_MATERIAL_PARAMETER:
  992.          *params = (GLdouble) ctx->Light.ColorMaterialMode;
  993.          break;
  994.       case GL_COLOR_WRITEMASK:
  995.          params[0] = (ctx->Color.ColorMask & 8) ? 1.0 : 0.0;
  996.          params[1] = (ctx->Color.ColorMask & 4) ? 1.0 : 0.0;
  997.          params[2] = (ctx->Color.ColorMask & 2) ? 1.0 : 0.0;
  998.          params[3] = (ctx->Color.ColorMask & 1) ? 1.0 : 0.0;
  999.          break;
  1000.       case GL_CULL_FACE:
  1001.          *params = (GLdouble) ctx->Polygon.CullFlag;
  1002.          break;
  1003.       case GL_CULL_FACE_MODE:
  1004.          *params = (GLdouble) ctx->Polygon.CullFaceMode;
  1005.          break;
  1006.       case GL_CURRENT_COLOR:
  1007.          params[0] = ctx->Current.IntColor[0] * ctx->Visual->InvRedScale;
  1008.          params[1] = ctx->Current.IntColor[1] * ctx->Visual->InvGreenScale;
  1009.          params[2] = ctx->Current.IntColor[2] * ctx->Visual->InvBlueScale;
  1010.          params[3] = ctx->Current.IntColor[3] * ctx->Visual->InvAlphaScale;
  1011.          break;
  1012.       case GL_CURRENT_INDEX:
  1013.          *params = (GLdouble) ctx->Current.Index;
  1014.          break;
  1015.       case GL_CURRENT_NORMAL:
  1016.          params[0] = (GLdouble) ctx->Current.Normal[0];
  1017.          params[1] = (GLdouble) ctx->Current.Normal[1];
  1018.          params[2] = (GLdouble) ctx->Current.Normal[2];
  1019.          break;
  1020.       case GL_CURRENT_RASTER_COLOR:
  1021.      params[0] = (GLdouble) ctx->Current.RasterColor[0];
  1022.      params[1] = (GLdouble) ctx->Current.RasterColor[1];
  1023.      params[2] = (GLdouble) ctx->Current.RasterColor[2];
  1024.      params[3] = (GLdouble) ctx->Current.RasterColor[3];
  1025.      break;
  1026.       case GL_CURRENT_RASTER_DISTANCE:
  1027.      params[0] = (GLdouble) ctx->Current.RasterDistance;
  1028.      break;
  1029.       case GL_CURRENT_RASTER_INDEX:
  1030.      *params = (GLdouble) ctx->Current.RasterIndex;
  1031.      break;
  1032.       case GL_CURRENT_RASTER_POSITION:
  1033.      params[0] = (GLdouble) ctx->Current.RasterPos[0];
  1034.      params[1] = (GLdouble) ctx->Current.RasterPos[1];
  1035.      params[2] = (GLdouble) ctx->Current.RasterPos[2];
  1036.      params[3] = (GLdouble) ctx->Current.RasterPos[3];
  1037.      break;
  1038.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  1039.      params[0] = (GLdouble) ctx->Current.RasterTexCoord[0];
  1040.      params[1] = (GLdouble) ctx->Current.RasterTexCoord[1];
  1041.      params[2] = (GLdouble) ctx->Current.RasterTexCoord[2];
  1042.      params[3] = (GLdouble) ctx->Current.RasterTexCoord[3];
  1043.      break;
  1044.       case GL_CURRENT_RASTER_POSITION_VALID:
  1045.      *params = (GLdouble) ctx->Current.RasterPosValid;
  1046.      break;
  1047.       case GL_CURRENT_TEXTURE_COORDS:
  1048.      params[0] = (GLdouble) ctx->Current.TexCoord[0];
  1049.      params[1] = (GLdouble) ctx->Current.TexCoord[1];
  1050.      params[2] = (GLdouble) ctx->Current.TexCoord[2];
  1051.      params[3] = (GLdouble) ctx->Current.TexCoord[3];
  1052.      break;
  1053.       case GL_DEPTH_BIAS:
  1054.      *params = (GLdouble) ctx->Pixel.DepthBias;
  1055.      break;
  1056.       case GL_DEPTH_BITS:
  1057.      *params = (GLdouble) (8*sizeof(GLdepth));
  1058.      break;
  1059.       case GL_DEPTH_CLEAR_VALUE:
  1060.      *params = (GLdouble) ctx->Depth.Clear;
  1061.      break;
  1062.       case GL_DEPTH_FUNC:
  1063.      *params = (GLdouble) ctx->Depth.Func;
  1064.      break;
  1065.       case GL_DEPTH_RANGE:
  1066.          params[0] = (GLdouble) ctx->Viewport.Near;
  1067.          params[1] = (GLdouble) ctx->Viewport.Far;
  1068.      break;
  1069.       case GL_DEPTH_SCALE:
  1070.      *params = (GLdouble) ctx->Pixel.DepthScale;
  1071.      break;
  1072.       case GL_DEPTH_TEST:
  1073.      *params = (GLdouble) ctx->Depth.Test;
  1074.      break;
  1075.       case GL_DEPTH_WRITEMASK:
  1076.      *params = (GLdouble) ctx->Depth.Mask;
  1077.      break;
  1078.       case GL_DITHER:
  1079.      *params = (GLdouble) ctx->Color.DitherFlag;
  1080.      break;
  1081.       case GL_DOUBLEBUFFER:
  1082.      *params = (GLdouble) ctx->Visual->DBflag;
  1083.      break;
  1084.       case GL_DRAW_BUFFER:
  1085.      *params = (GLdouble) ctx->Color.DrawBuffer;
  1086.      break;
  1087.       case GL_EDGE_FLAG:
  1088.      *params = (GLdouble) ctx->Current.EdgeFlag;
  1089.      break;
  1090.       case GL_FEEDBACK_BUFFER_SIZE:
  1091.          /* TODO: is this right?  Or, return number of entries in buffer? */
  1092.          *params = (GLdouble) ctx->Feedback.BufferSize;
  1093.          break;
  1094.       case GL_FEEDBACK_BUFFER_TYPE:
  1095.          *params = (GLdouble) ctx->Feedback.Type;
  1096.          break;
  1097.       case GL_FOG:
  1098.      *params = (GLdouble) ctx->Fog.Enabled;
  1099.      break;
  1100.       case GL_FOG_COLOR:
  1101.      params[0] = (GLdouble) ctx->Fog.Color[0];
  1102.      params[1] = (GLdouble) ctx->Fog.Color[1];
  1103.      params[2] = (GLdouble) ctx->Fog.Color[2];
  1104.      params[3] = (GLdouble) ctx->Fog.Color[3];
  1105.      break;
  1106.       case GL_FOG_DENSITY:
  1107.      *params = (GLdouble) ctx->Fog.Density;
  1108.      break;
  1109.       case GL_FOG_END:
  1110.      *params = (GLdouble) ctx->Fog.End;
  1111.      break;
  1112.       case GL_FOG_HINT:
  1113.      *params = (GLdouble) ctx->Hint.Fog;
  1114.      break;
  1115.       case GL_FOG_INDEX:
  1116.      *params = (GLdouble) ctx->Fog.Index;
  1117.      break;
  1118.       case GL_FOG_MODE:
  1119.      *params = (GLdouble) ctx->Fog.Mode;
  1120.      break;
  1121.       case GL_FOG_START:
  1122.      *params = (GLdouble) ctx->Fog.Start;
  1123.      break;
  1124.       case GL_FRONT_FACE:
  1125.      *params = (GLdouble) ctx->Polygon.FrontFace;
  1126.      break;
  1127.       case GL_GREEN_BIAS:
  1128.          *params = (GLdouble) ctx->Pixel.GreenBias;
  1129.          break;
  1130.       case GL_GREEN_BITS:
  1131.          *params = (GLdouble) bits( ctx->Visual->GreenScale );
  1132.          break;
  1133.       case GL_GREEN_SCALE:
  1134.          *params = (GLdouble) ctx->Pixel.GreenScale;
  1135.          break;
  1136.       case GL_INDEX_BITS:
  1137.          *params = (GLdouble) ctx->Visual->IndexBits;
  1138.      break;
  1139.       case GL_INDEX_CLEAR_VALUE:
  1140.          *params = (GLdouble) ctx->Color.ClearIndex;
  1141.      break;
  1142.       case GL_INDEX_MODE:
  1143.      *params = ctx->Visual->RGBAflag ? 0.0 : 1.0;
  1144.      break;
  1145.       case GL_INDEX_OFFSET:
  1146.      *params = (GLdouble) ctx->Pixel.IndexOffset;
  1147.      break;
  1148.       case GL_INDEX_SHIFT:
  1149.      *params = (GLdouble) ctx->Pixel.IndexShift;
  1150.      break;
  1151.       case GL_INDEX_WRITEMASK:
  1152.      *params = (GLdouble) ctx->Color.IndexMask;
  1153.      break;
  1154.       case GL_LIGHT0:
  1155.       case GL_LIGHT1:
  1156.       case GL_LIGHT2:
  1157.       case GL_LIGHT3:
  1158.       case GL_LIGHT4:
  1159.       case GL_LIGHT5:
  1160.       case GL_LIGHT6:
  1161.       case GL_LIGHT7:
  1162.      *params = (GLdouble) ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  1163.      break;
  1164.       case GL_LIGHTING:
  1165.      *params = (GLdouble) ctx->Light.Enabled;
  1166.      break;
  1167.       case GL_LIGHT_MODEL_AMBIENT:
  1168.      params[0] = (GLdouble) ctx->Light.Model.Ambient[0];
  1169.      params[1] = (GLdouble) ctx->Light.Model.Ambient[1];
  1170.      params[2] = (GLdouble) ctx->Light.Model.Ambient[2];
  1171.      params[3] = (GLdouble) ctx->Light.Model.Ambient[3];
  1172.      break;
  1173.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  1174.      *params = (GLdouble) ctx->Light.Model.LocalViewer;
  1175.      break;
  1176.       case GL_LIGHT_MODEL_TWO_SIDE:
  1177.      *params = (GLdouble) ctx->Light.Model.TwoSide;
  1178.      break;
  1179.       case GL_LINE_SMOOTH:
  1180.      *params = (GLdouble) ctx->Line.SmoothFlag;
  1181.      break;
  1182.       case GL_LINE_SMOOTH_HINT:
  1183.      *params = (GLdouble) ctx->Hint.LineSmooth;
  1184.      break;
  1185.       case GL_LINE_STIPPLE:
  1186.      *params = (GLdouble) ctx->Line.StippleFlag;
  1187.      break;
  1188.       case GL_LINE_STIPPLE_PATTERN:
  1189.          *params = (GLdouble) ctx->Line.StipplePattern;
  1190.          break;
  1191.       case GL_LINE_STIPPLE_REPEAT:
  1192.          *params = (GLdouble) ctx->Line.StippleFactor;
  1193.          break;
  1194.       case GL_LINE_WIDTH:
  1195.      *params = (GLdouble) ctx->Line.Width;
  1196.      break;
  1197.       case GL_LINE_WIDTH_GRANULARITY:
  1198.      *params = (GLdouble) LINE_WIDTH_GRANULARITY;
  1199.      break;
  1200.       case GL_LINE_WIDTH_RANGE:
  1201.      params[0] = (GLdouble) MIN_LINE_WIDTH;
  1202.      params[1] = (GLdouble) MAX_LINE_WIDTH;
  1203.      break;
  1204.       case GL_LIST_BASE:
  1205.      *params = (GLdouble) ctx->List.ListBase;
  1206.      break;
  1207.       case GL_LIST_INDEX:
  1208.      *params = (GLdouble) gl_list_index();
  1209.      break;
  1210.       case GL_LIST_MODE:
  1211.      *params = ctx->ExecuteFlag ? (GLdouble) GL_COMPILE_AND_EXECUTE
  1212.                      : (GLdouble) GL_COMPILE;
  1213.      break;
  1214.       case GL_INDEX_LOGIC_OP:
  1215.      *params = (GLdouble) ctx->Color.IndexLogicOpEnabled;
  1216.      break;
  1217.       case GL_COLOR_LOGIC_OP:
  1218.      *params = (GLdouble) ctx->Color.ColorLogicOpEnabled;
  1219.      break;
  1220.       case GL_LOGIC_OP_MODE:
  1221.          *params = (GLdouble) ctx->Color.LogicOp;
  1222.      break;
  1223.       case GL_MAP1_COLOR_4:
  1224.      *params = (GLdouble) ctx->Eval.Map1Color4;
  1225.      break;
  1226.       case GL_MAP1_GRID_DOMAIN:
  1227.      params[0] = (GLdouble) ctx->Eval.MapGrid1u1;
  1228.      params[1] = (GLdouble) ctx->Eval.MapGrid1u2;
  1229.      break;
  1230.       case GL_MAP1_GRID_SEGMENTS:
  1231.      *params = (GLdouble) ctx->Eval.MapGrid1un;
  1232.      break;
  1233.       case GL_MAP1_INDEX:
  1234.      *params = (GLdouble) ctx->Eval.Map1Index;
  1235.      break;
  1236.       case GL_MAP1_NORMAL:
  1237.      *params = (GLdouble) ctx->Eval.Map1Normal;
  1238.      break;
  1239.       case GL_MAP1_TEXTURE_COORD_1:
  1240.      *params = (GLdouble) ctx->Eval.Map1TextureCoord1;
  1241.      break;
  1242.       case GL_MAP1_TEXTURE_COORD_2:
  1243.      *params = (GLdouble) ctx->Eval.Map1TextureCoord2;
  1244.      break;
  1245.       case GL_MAP1_TEXTURE_COORD_3:
  1246.      *params = (GLdouble) ctx->Eval.Map1TextureCoord3;
  1247.      break;
  1248.       case GL_MAP1_TEXTURE_COORD_4:
  1249.      *params = (GLdouble) ctx->Eval.Map1TextureCoord4;
  1250.      break;
  1251.       case GL_MAP1_VERTEX_3:
  1252.      *params = (GLdouble) ctx->Eval.Map1Vertex3;
  1253.      break;
  1254.       case GL_MAP1_VERTEX_4:
  1255.      *params = (GLdouble) ctx->Eval.Map1Vertex4;
  1256.      break;
  1257.       case GL_MAP2_COLOR_4:
  1258.      *params = (GLdouble) ctx->Eval.Map2Color4;
  1259.      break;
  1260.       case GL_MAP2_GRID_DOMAIN:
  1261.      params[0] = (GLdouble) ctx->Eval.MapGrid2u1;
  1262.      params[1] = (GLdouble) ctx->Eval.MapGrid2u2;
  1263.      params[2] = (GLdouble) ctx->Eval.MapGrid2v1;
  1264.      params[3] = (GLdouble) ctx->Eval.MapGrid2v2;
  1265.      break;
  1266.       case GL_MAP2_GRID_SEGMENTS:
  1267.      params[0] = (GLdouble) ctx->Eval.MapGrid2un;
  1268.      params[1] = (GLdouble) ctx->Eval.MapGrid2vn;
  1269.      break;
  1270.       case GL_MAP2_INDEX:
  1271.      *params = (GLdouble) ctx->Eval.Map2Index;
  1272.      break;
  1273.       case GL_MAP2_NORMAL:
  1274.      *params = (GLdouble) ctx->Eval.Map2Normal;
  1275.      break;
  1276.       case GL_MAP2_TEXTURE_COORD_1:
  1277.      *params = (GLdouble) ctx->Eval.Map2TextureCoord1;
  1278.      break;
  1279.       case GL_MAP2_TEXTURE_COORD_2:
  1280.      *params = (GLdouble) ctx->Eval.Map2TextureCoord2;
  1281.      break;
  1282.       case GL_MAP2_TEXTURE_COORD_3:
  1283.      *params = (GLdouble) ctx->Eval.Map2TextureCoord3;
  1284.      break;
  1285.       case GL_MAP2_TEXTURE_COORD_4:
  1286.      *params = (GLdouble) ctx->Eval.Map2TextureCoord4;
  1287.      break;
  1288.       case GL_MAP2_VERTEX_3:
  1289.      *params = (GLdouble) ctx->Eval.Map2Vertex3;
  1290.      break;
  1291.       case GL_MAP2_VERTEX_4:
  1292.      *params = (GLdouble) ctx->Eval.Map2Vertex4;
  1293.      break;
  1294.       case GL_MAP_COLOR:
  1295.      *params = (GLdouble) ctx->Pixel.MapColorFlag;
  1296.      break;
  1297.       case GL_MAP_STENCIL:
  1298.      *params = (GLdouble) ctx->Pixel.MapStencilFlag;
  1299.      break;
  1300.       case GL_MATRIX_MODE:
  1301.      *params = (GLdouble) ctx->Transform.MatrixMode;
  1302.      break;
  1303.       case GL_MAX_ATTRIB_STACK_DEPTH:
  1304.      *params = (GLdouble) MAX_ATTRIB_STACK_DEPTH;
  1305.      break;
  1306.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  1307.          *params = (GLdouble) MAX_CLIENT_ATTRIB_STACK_DEPTH;
  1308.          break;
  1309.       case GL_MAX_CLIP_PLANES:
  1310.      *params = (GLdouble) MAX_CLIP_PLANES;
  1311.      break;
  1312.       case GL_MAX_EVAL_ORDER:
  1313.      *params = (GLdouble) MAX_EVAL_ORDER;
  1314.      break;
  1315.       case GL_MAX_LIGHTS:
  1316.      *params = (GLdouble) MAX_LIGHTS;
  1317.      break;
  1318.       case GL_MAX_LIST_NESTING:
  1319.      *params = (GLdouble) MAX_LIST_NESTING;
  1320.      break;
  1321.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  1322.      *params = (GLdouble) MAX_MODELVIEW_STACK_DEPTH;
  1323.      break;
  1324.       case GL_MAX_NAME_STACK_DEPTH:
  1325.      *params = (GLdouble) MAX_NAME_STACK_DEPTH;
  1326.      break;
  1327.       case GL_MAX_PIXEL_MAP_TABLE:
  1328.      *params = (GLdouble) MAX_PIXEL_MAP_TABLE;
  1329.      break;
  1330.       case GL_MAX_PROJECTION_STACK_DEPTH:
  1331.      *params = (GLdouble) MAX_PROJECTION_STACK_DEPTH;
  1332.      break;
  1333.       case GL_MAX_TEXTURE_SIZE:
  1334.      *params = (GLdouble) MAX_TEXTURE_SIZE;
  1335.      break;
  1336.       case GL_MAX_TEXTURE_STACK_DEPTH:
  1337.      *params = (GLdouble) MAX_TEXTURE_STACK_DEPTH;
  1338.      break;
  1339.       case GL_MAX_VIEWPORT_DIMS:
  1340.          params[0] = (GLdouble) MAX_WIDTH;
  1341.          params[1] = (GLdouble) MAX_HEIGHT;
  1342.          break;
  1343.       case GL_MODELVIEW_MATRIX:
  1344.      for (i=0;i<16;i++) {
  1345.         params[i] = (GLdouble) ctx->ModelViewMatrix[i];
  1346.      }
  1347.      break;
  1348.       case GL_MODELVIEW_STACK_DEPTH:
  1349.      *params = (GLdouble) ctx->ModelViewStackDepth;
  1350.      break;
  1351.       case GL_NAME_STACK_DEPTH:
  1352.      *params = (GLdouble) ctx->Select.NameStackDepth;
  1353.      break;
  1354.       case GL_NORMALIZE:
  1355.      *params = (GLdouble) ctx->Transform.Normalize;
  1356.      break;
  1357.       case GL_PACK_ALIGNMENT:
  1358.      *params = (GLdouble) ctx->Pack.Alignment;
  1359.      break;
  1360.       case GL_PACK_LSB_FIRST:
  1361.      *params = (GLdouble) ctx->Pack.LsbFirst;
  1362.      break;
  1363.       case GL_PACK_ROW_LENGTH:
  1364.      *params = (GLdouble) ctx->Pack.RowLength;
  1365.      break;
  1366.       case GL_PACK_SKIP_PIXELS:
  1367.      *params = (GLdouble) ctx->Pack.SkipPixels;
  1368.      break;
  1369.       case GL_PACK_SKIP_ROWS:
  1370.      *params = (GLdouble) ctx->Pack.SkipRows;
  1371.      break;
  1372.       case GL_PACK_SWAP_BYTES:
  1373.      *params = (GLdouble) ctx->Pack.SwapBytes;
  1374.      break;
  1375.       case GL_PACK_SKIP_IMAGES_EXT:
  1376.          *params = (GLdouble) ctx->Pack.SkipImages;
  1377.          break;
  1378.       case GL_PACK_IMAGE_HEIGHT_EXT:
  1379.          *params = (GLdouble) ctx->Pack.ImageHeight;
  1380.          break;
  1381.       case GL_PERSPECTIVE_CORRECTION_HINT:
  1382.      *params = (GLdouble) ctx->Hint.PerspectiveCorrection;
  1383.      break;
  1384.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  1385.      *params = (GLdouble) ctx->Pixel.MapAtoAsize;
  1386.      break;
  1387.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  1388.      *params = (GLdouble) ctx->Pixel.MapBtoBsize;
  1389.      break;
  1390.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  1391.      *params = (GLdouble) ctx->Pixel.MapGtoGsize;
  1392.      break;
  1393.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  1394.      *params = (GLdouble) ctx->Pixel.MapItoAsize;
  1395.      break;
  1396.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  1397.      *params = (GLdouble) ctx->Pixel.MapItoBsize;
  1398.      break;
  1399.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  1400.      *params = (GLdouble) ctx->Pixel.MapItoGsize;
  1401.      break;
  1402.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  1403.      *params = (GLdouble) ctx->Pixel.MapItoIsize;
  1404.      break;
  1405.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  1406.      *params = (GLdouble) ctx->Pixel.MapItoRsize;
  1407.      break;
  1408.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  1409.      *params = (GLdouble) ctx->Pixel.MapRtoRsize;
  1410.      break;
  1411.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  1412.      *params = (GLdouble) ctx->Pixel.MapStoSsize;
  1413.      break;
  1414.       case GL_POINT_SIZE:
  1415.          *params = (GLdouble) ctx->Point.Size;
  1416.          break;
  1417.       case GL_POINT_SIZE_GRANULARITY:
  1418.      *params = (GLdouble) POINT_SIZE_GRANULARITY;
  1419.      break;
  1420.       case GL_POINT_SIZE_RANGE:
  1421.      params[0] = (GLdouble) MIN_POINT_SIZE;
  1422.      params[1] = (GLdouble) MAX_POINT_SIZE;
  1423.      break;
  1424.       case GL_POINT_SMOOTH:
  1425.      *params = (GLdouble) ctx->Point.SmoothFlag;
  1426.      break;
  1427.       case GL_POINT_SMOOTH_HINT:
  1428.      *params = (GLdouble) ctx->Hint.PointSmooth;
  1429.      break;
  1430.       case GL_POLYGON_MODE:
  1431.      params[0] = (GLdouble) ctx->Polygon.FrontMode;
  1432.      params[1] = (GLdouble) ctx->Polygon.BackMode;
  1433.      break;
  1434. #ifdef GL_EXT_polygon_offset
  1435.       case GL_POLYGON_OFFSET_BIAS_EXT:
  1436.          *params = (GLdouble) ctx->Polygon.OffsetUnits;
  1437.          break;
  1438. #endif
  1439.       case GL_POLYGON_OFFSET_FACTOR:
  1440.          *params = (GLdouble) ctx->Polygon.OffsetFactor;
  1441.          break;
  1442.       case GL_POLYGON_OFFSET_UNITS:
  1443.          *params = (GLdouble) ctx->Polygon.OffsetUnits;
  1444.          break;
  1445.       case GL_POLYGON_SMOOTH:
  1446.      *params = (GLdouble) ctx->Polygon.SmoothFlag;
  1447.      break;
  1448.       case GL_POLYGON_SMOOTH_HINT:
  1449.      *params = (GLdouble) ctx->Hint.PolygonSmooth;
  1450.      break;
  1451.       case GL_POLYGON_STIPPLE:
  1452.      for (i=0;i<32;i++) {        /* RIGHT? */
  1453.         params[i] = (GLdouble) ctx->PolygonStipple[i];
  1454.      }
  1455.      break;
  1456.       case GL_PROJECTION_MATRIX:
  1457.      for (i=0;i<16;i++) {
  1458.         params[i] = (GLdouble) ctx->ProjectionMatrix[i];
  1459.      }
  1460.      break;
  1461.       case GL_PROJECTION_STACK_DEPTH:
  1462.      *params = (GLdouble) ctx->ProjectionStackDepth;
  1463.      break;
  1464.       case GL_READ_BUFFER:
  1465.      *params = (GLdouble) ctx->Pixel.ReadBuffer;
  1466.      break;
  1467.       case GL_RED_BIAS:
  1468.          *params = (GLdouble) ctx->Pixel.RedBias;
  1469.          break;
  1470.       case GL_RED_BITS:
  1471.          *params = (GLdouble) bits( ctx->Visual->RedScale );
  1472.          break;
  1473.       case GL_RED_SCALE:
  1474.          *params = (GLdouble) ctx->Pixel.RedScale;
  1475.          break;
  1476.       case GL_RENDER_MODE:
  1477.      *params = (GLdouble) ctx->RenderMode;
  1478.      break;
  1479.       case GL_RGBA_MODE:
  1480.      *params = (GLdouble) ctx->Visual->RGBAflag;
  1481.      break;
  1482.       case GL_SCISSOR_BOX:
  1483.      params[0] = (GLdouble) ctx->Scissor.X;
  1484.      params[1] = (GLdouble) ctx->Scissor.Y;
  1485.      params[2] = (GLdouble) ctx->Scissor.Width;
  1486.      params[3] = (GLdouble) ctx->Scissor.Height;
  1487.      break;
  1488.       case GL_SCISSOR_TEST:
  1489.      *params = (GLdouble) ctx->Scissor.Enabled;
  1490.      break;
  1491.       case GL_SHADE_MODEL:
  1492.      *params = (GLdouble) ctx->Light.ShadeModel;
  1493.      break;
  1494.       case GL_STENCIL_BITS:
  1495.          *params = (GLdouble) (8*sizeof(GLstencil));
  1496.          break;
  1497.       case GL_STENCIL_CLEAR_VALUE:
  1498.      *params = (GLdouble) ctx->Stencil.Clear;
  1499.      break;
  1500.       case GL_STENCIL_FAIL:
  1501.      *params = (GLdouble) ctx->Stencil.FailFunc;
  1502.      break;
  1503.       case GL_STENCIL_FUNC:
  1504.      *params = (GLdouble) ctx->Stencil.Function;
  1505.      break;
  1506.       case GL_STENCIL_PASS_DEPTH_FAIL:
  1507.      *params = (GLdouble) ctx->Stencil.ZFailFunc;
  1508.      break;
  1509.       case GL_STENCIL_PASS_DEPTH_PASS:
  1510.      *params = (GLdouble) ctx->Stencil.ZPassFunc;
  1511.      break;
  1512.       case GL_STENCIL_REF:
  1513.      *params = (GLdouble) ctx->Stencil.Ref;
  1514.      break;
  1515.       case GL_STENCIL_TEST:
  1516.      *params = (GLdouble) ctx->Stencil.Enabled;
  1517.      break;
  1518.       case GL_STENCIL_VALUE_MASK:
  1519.      *params = (GLdouble) ctx->Stencil.ValueMask;
  1520.      break;
  1521.       case GL_STENCIL_WRITEMASK:
  1522.      *params = (GLdouble) ctx->Stencil.WriteMask;
  1523.      break;
  1524.       case GL_STEREO:
  1525.      *params = 0.0;   /* TODO */
  1526.      break;
  1527.       case GL_SUBPIXEL_BITS:
  1528.      *params = 0.0;   /* TODO */
  1529.      break;
  1530.       case GL_TEXTURE_1D:
  1531.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? 1.0 : 0.0;
  1532.      break;
  1533.       case GL_TEXTURE_2D:
  1534.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? 1.0 : 0.0;
  1535.      break;
  1536.       case GL_TEXTURE_3D_EXT:
  1537.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? 1.0 : 0.0;
  1538.      break;
  1539.       case GL_TEXTURE_ENV_COLOR:
  1540.      params[0] = (GLdouble) ctx->Texture.EnvColor[0];
  1541.      params[1] = (GLdouble) ctx->Texture.EnvColor[1];
  1542.      params[2] = (GLdouble) ctx->Texture.EnvColor[2];
  1543.      params[3] = (GLdouble) ctx->Texture.EnvColor[3];
  1544.      break;
  1545.       case GL_TEXTURE_ENV_MODE:
  1546.      *params = (GLdouble) ctx->Texture.EnvMode;
  1547.      break;
  1548.       case GL_TEXTURE_GEN_S:
  1549.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? 1.0 : 0.0;
  1550.      break;
  1551.       case GL_TEXTURE_GEN_T:
  1552.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? 1.0 : 0.0;
  1553.      break;
  1554.       case GL_TEXTURE_GEN_R:
  1555.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? 1.0 : 0.0;
  1556.      break;
  1557.       case GL_TEXTURE_GEN_Q:
  1558.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? 1.0 : 0.0;
  1559.      break;
  1560.       case GL_TEXTURE_MATRIX:
  1561.          for (i=0;i<16;i++) {
  1562.         params[i] = (GLdouble) ctx->TextureMatrix[i];
  1563.      }
  1564.      break;
  1565.       case GL_TEXTURE_STACK_DEPTH:
  1566.      *params = (GLdouble) ctx->TextureStackDepth;
  1567.      break;
  1568.       case GL_UNPACK_ALIGNMENT:
  1569.      *params = (GLdouble) ctx->Unpack.Alignment;
  1570.      break;
  1571.       case GL_UNPACK_LSB_FIRST:
  1572.      *params = (GLdouble) ctx->Unpack.LsbFirst;
  1573.      break;
  1574.       case GL_UNPACK_ROW_LENGTH:
  1575.      *params = (GLdouble) ctx->Unpack.RowLength;
  1576.      break;
  1577.       case GL_UNPACK_SKIP_PIXELS:
  1578.      *params = (GLdouble) ctx->Unpack.SkipPixels;
  1579.      break;
  1580.       case GL_UNPACK_SKIP_ROWS:
  1581.      *params = (GLdouble) ctx->Unpack.SkipRows;
  1582.      break;
  1583.       case GL_UNPACK_SWAP_BYTES:
  1584.      *params = (GLdouble) ctx->Unpack.SwapBytes;
  1585.      break;
  1586.       case GL_UNPACK_SKIP_IMAGES_EXT:
  1587.          *params = (GLdouble) ctx->Unpack.SkipImages;
  1588.          break;
  1589.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  1590.          *params = (GLdouble) ctx->Unpack.ImageHeight;
  1591.          break;
  1592.       case GL_VIEWPORT:
  1593.      params[0] = (GLdouble) ctx->Viewport.X;
  1594.      params[1] = (GLdouble) ctx->Viewport.Y;
  1595.      params[2] = (GLdouble) ctx->Viewport.Width;
  1596.      params[3] = (GLdouble) ctx->Viewport.Height;
  1597.      break;
  1598.       case GL_ZOOM_X:
  1599.      *params = (GLdouble) ctx->Pixel.ZoomX;
  1600.      break;
  1601.       case GL_ZOOM_Y:
  1602.      *params = (GLdouble) ctx->Pixel.ZoomY;
  1603.      break;
  1604.       case GL_VERTEX_ARRAY_SIZE:
  1605.          *params = (GLdouble) ctx->Array.VertexSize;
  1606.          break;
  1607.       case GL_VERTEX_ARRAY_TYPE:
  1608.          *params = (GLdouble) ctx->Array.VertexType;
  1609.          break;
  1610.       case GL_VERTEX_ARRAY_STRIDE:
  1611.          *params = (GLdouble) ctx->Array.VertexStride;
  1612.          break;
  1613.       case GL_VERTEX_ARRAY_COUNT_EXT:
  1614.          *params = 0.0;
  1615.          break;
  1616.       case GL_NORMAL_ARRAY_TYPE:
  1617.          *params = (GLdouble) ctx->Array.NormalType;
  1618.          break;
  1619.       case GL_NORMAL_ARRAY_STRIDE:
  1620.          *params = (GLdouble) ctx->Array.NormalStride;
  1621.          break;
  1622.       case GL_NORMAL_ARRAY_COUNT_EXT:
  1623.          *params = 0.0;
  1624.          break;
  1625.       case GL_COLOR_ARRAY_SIZE:
  1626.          *params = (GLdouble) ctx->Array.ColorSize;
  1627.          break;
  1628.       case GL_COLOR_ARRAY_TYPE:
  1629.          *params = (GLdouble) ctx->Array.ColorType;
  1630.          break;
  1631.       case GL_COLOR_ARRAY_STRIDE:
  1632.          *params = (GLdouble) ctx->Array.ColorStride;
  1633.          break;
  1634.       case GL_COLOR_ARRAY_COUNT_EXT:
  1635.          *params = 0.0;
  1636.          break;
  1637.       case GL_INDEX_ARRAY_TYPE:
  1638.          *params = (GLdouble) ctx->Array.IndexType;
  1639.          break;
  1640.       case GL_INDEX_ARRAY_STRIDE:
  1641.          *params = (GLdouble) ctx->Array.IndexStride;
  1642.          break;
  1643.       case GL_INDEX_ARRAY_COUNT_EXT:
  1644.          *params = 0.0;
  1645.          break;
  1646.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  1647.          *params = (GLdouble) ctx->Array.TexCoordSize;
  1648.          break;
  1649.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  1650.          *params = (GLdouble) ctx->Array.TexCoordType;
  1651.          break;
  1652.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  1653.          *params = (GLdouble) ctx->Array.TexCoordStride;
  1654.          break;
  1655.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  1656.          *params = 0.0;
  1657.          break;
  1658.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  1659.          *params = (GLdouble) ctx->Array.EdgeFlagStride;
  1660.          break;
  1661.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  1662.          *params = 0.0;
  1663.          break;
  1664.       case GL_TEXTURE_BINDING_1D:
  1665.          *params = (GLdouble) ctx->Texture.Current1D->Name;
  1666.           break;
  1667.       case GL_TEXTURE_BINDING_2D:
  1668.          *params = (GLdouble) ctx->Texture.Current2D->Name;
  1669.           break;
  1670.       case GL_TEXTURE_3D_BINDING_EXT:
  1671.          *params = (GLdouble) ctx->Texture.Current3D->Name;
  1672.           break;
  1673.  
  1674.       default:
  1675.          gl_error( ctx, GL_INVALID_ENUM, "glGetDoublev" );
  1676.    }
  1677. }
  1678.  
  1679.  
  1680.  
  1681.  
  1682. void gl_GetFloatv( GLcontext *ctx, GLenum pname, GLfloat *params )
  1683. {
  1684.    GLuint i;
  1685.  
  1686.    if (INSIDE_BEGIN_END(ctx)) {
  1687.       gl_error( ctx, GL_INVALID_OPERATION, "glGetFloatv" );
  1688.       return;
  1689.    }
  1690.    switch (pname) {
  1691.       case GL_ACCUM_RED_BITS:
  1692.       case GL_ACCUM_GREEN_BITS:
  1693.       case GL_ACCUM_BLUE_BITS:
  1694.       case GL_ACCUM_ALPHA_BITS:
  1695.          *params = (GLfloat) (sizeof(GLaccum)*8);
  1696.          break;
  1697.       case GL_ACCUM_CLEAR_VALUE:
  1698.          params[0] = ctx->Accum.ClearColor[0];
  1699.          params[1] = ctx->Accum.ClearColor[1];
  1700.          params[2] = ctx->Accum.ClearColor[2];
  1701.          params[3] = ctx->Accum.ClearColor[3];
  1702.          break;
  1703.       case GL_ALPHA_BIAS:
  1704.          *params = ctx->Pixel.AlphaBias;
  1705.          break;
  1706.       case GL_ALPHA_BITS:
  1707.          if (ctx->Visual->FrontAlphaEnabled || ctx->Visual->BackAlphaEnabled) {
  1708.             *params = 8*sizeof(GLubyte);
  1709.          }
  1710.          else {
  1711.             *params = 0.0F;
  1712.          }
  1713.          break;
  1714.       case GL_ALPHA_SCALE:
  1715.          *params = ctx->Pixel.AlphaScale;
  1716.          break;
  1717.       case GL_ALPHA_TEST:
  1718.          *params = (GLfloat) ctx->Color.AlphaEnabled;
  1719.          break;
  1720.       case GL_ALPHA_TEST_FUNC:
  1721.          *params = (GLfloat) ctx->Color.AlphaFunc;
  1722.          break;
  1723.       case GL_ALPHA_TEST_REF:
  1724.          *params = (GLfloat) ctx->Color.AlphaRef;
  1725.          break;
  1726.       case GL_ATTRIB_STACK_DEPTH:
  1727.          *params = (GLfloat ) ctx->AttribStackDepth;
  1728.          break;
  1729.       case GL_AUTO_NORMAL:
  1730.          *params = (GLfloat) ctx->Eval.AutoNormal;
  1731.          break;
  1732.       case GL_AUX_BUFFERS:
  1733.          *params = (GLfloat) NUM_AUX_BUFFERS;
  1734.          break;
  1735.       case GL_BLEND:
  1736.          *params = (GLfloat) ctx->Color.BlendEnabled;
  1737.          break;
  1738.       case GL_BLEND_DST:
  1739.          *params = (GLfloat) ctx->Color.BlendDst;
  1740.          break;
  1741.       case GL_BLEND_SRC:
  1742.          *params = (GLfloat) ctx->Color.BlendSrc;
  1743.          break;
  1744.       case GL_BLEND_EQUATION_EXT:
  1745.      *params = (GLfloat) ctx->Color.BlendEquation;
  1746.      break;
  1747.       case GL_BLEND_COLOR_EXT:
  1748.      params[0] = ctx->Color.BlendColor[0];
  1749.      params[1] = ctx->Color.BlendColor[1];
  1750.      params[2] = ctx->Color.BlendColor[2];
  1751.      params[3] = ctx->Color.BlendColor[3];
  1752.      break;
  1753.       case GL_BLUE_BIAS:
  1754.          *params = ctx->Pixel.BlueBias;
  1755.          break;
  1756.       case GL_BLUE_BITS:
  1757.          *params = (GLfloat) bits( ctx->Visual->BlueScale );
  1758.          break;
  1759.       case GL_BLUE_SCALE:
  1760.          *params = ctx->Pixel.BlueScale;
  1761.          break;
  1762.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  1763.          *params = (GLfloat) ctx->ClientAttribStackDepth;
  1764.          break;
  1765.       case GL_CLIP_PLANE0:
  1766.       case GL_CLIP_PLANE1:
  1767.       case GL_CLIP_PLANE2:
  1768.       case GL_CLIP_PLANE3:
  1769.       case GL_CLIP_PLANE4:
  1770.       case GL_CLIP_PLANE5:
  1771.          *params = (GLfloat) ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  1772.          break;
  1773.       case GL_COLOR_CLEAR_VALUE:
  1774.          params[0] = (GLfloat) ctx->Color.ClearColor[0];
  1775.          params[1] = (GLfloat) ctx->Color.ClearColor[1];
  1776.          params[2] = (GLfloat) ctx->Color.ClearColor[2];
  1777.          params[3] = (GLfloat) ctx->Color.ClearColor[3];
  1778.          break;
  1779.       case GL_COLOR_MATERIAL:
  1780.          *params = (GLfloat) ctx->Light.ColorMaterialEnabled;
  1781.          break;
  1782.       case GL_COLOR_MATERIAL_FACE:
  1783.          *params = (GLfloat) ctx->Light.ColorMaterialFace;
  1784.          break;
  1785.       case GL_COLOR_MATERIAL_PARAMETER:
  1786.          *params = (GLfloat) ctx->Light.ColorMaterialMode;
  1787.          break;
  1788.       case GL_COLOR_WRITEMASK:
  1789.          params[0] = (ctx->Color.ColorMask & 8) ? 1.0F : 0.0F;
  1790.          params[1] = (ctx->Color.ColorMask & 4) ? 1.0F : 0.0F;
  1791.          params[2] = (ctx->Color.ColorMask & 2) ? 1.0F : 0.0F;
  1792.          params[3] = (ctx->Color.ColorMask & 1) ? 1.0F : 0.0F;
  1793.          break;
  1794.       case GL_CULL_FACE:
  1795.          *params = (GLfloat) ctx->Polygon.CullFlag;
  1796.          break;
  1797.       case GL_CULL_FACE_MODE:
  1798.          *params = (GLfloat) ctx->Polygon.CullFaceMode;
  1799.          break;
  1800.       case GL_CURRENT_COLOR:
  1801.          params[0] = ctx->Current.IntColor[0] * ctx->Visual->InvRedScale;
  1802.          params[1] = ctx->Current.IntColor[1] * ctx->Visual->InvGreenScale;
  1803.          params[2] = ctx->Current.IntColor[2] * ctx->Visual->InvBlueScale;
  1804.          params[3] = ctx->Current.IntColor[3] * ctx->Visual->InvAlphaScale;
  1805.          break;
  1806.       case GL_CURRENT_INDEX:
  1807.          *params = (GLfloat) ctx->Current.Index;
  1808.          break;
  1809.       case GL_CURRENT_NORMAL:
  1810.          params[0] = ctx->Current.Normal[0];
  1811.          params[1] = ctx->Current.Normal[1];
  1812.          params[2] = ctx->Current.Normal[2];
  1813.          break;
  1814.       case GL_CURRENT_RASTER_COLOR:
  1815.      params[0] = ctx->Current.RasterColor[0];
  1816.      params[1] = ctx->Current.RasterColor[1];
  1817.      params[2] = ctx->Current.RasterColor[2];
  1818.      params[3] = ctx->Current.RasterColor[3];
  1819.      break;
  1820.       case GL_CURRENT_RASTER_DISTANCE:
  1821.      params[0] = ctx->Current.RasterDistance;
  1822.      break;
  1823.       case GL_CURRENT_RASTER_INDEX:
  1824.      *params = (GLfloat) ctx->Current.RasterIndex;
  1825.      break;
  1826.       case GL_CURRENT_RASTER_POSITION:
  1827.      params[0] = ctx->Current.RasterPos[0];
  1828.      params[1] = ctx->Current.RasterPos[1];
  1829.      params[2] = ctx->Current.RasterPos[2];
  1830.      params[3] = ctx->Current.RasterPos[3];
  1831.      break;
  1832.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  1833.      params[0] = ctx->Current.RasterTexCoord[0];
  1834.      params[1] = ctx->Current.RasterTexCoord[1];
  1835.      params[2] = ctx->Current.RasterTexCoord[2];
  1836.      params[3] = ctx->Current.RasterTexCoord[3];
  1837.      break;
  1838.       case GL_CURRENT_RASTER_POSITION_VALID:
  1839.      *params = (GLfloat) ctx->Current.RasterPosValid;
  1840.      break;
  1841.       case GL_CURRENT_TEXTURE_COORDS:
  1842.      params[0] = (GLfloat) ctx->Current.TexCoord[0];
  1843.      params[1] = (GLfloat) ctx->Current.TexCoord[1];
  1844.      params[2] = (GLfloat) ctx->Current.TexCoord[2];
  1845.      params[3] = (GLfloat) ctx->Current.TexCoord[3];
  1846.      break;
  1847.       case GL_DEPTH_BIAS:
  1848.      *params = (GLfloat) ctx->Pixel.DepthBias;
  1849.      break;
  1850.       case GL_DEPTH_BITS:
  1851.      *params = (GLfloat) (8*sizeof(GLdepth));
  1852.      break;
  1853.       case GL_DEPTH_CLEAR_VALUE:
  1854.      *params = (GLfloat) ctx->Depth.Clear;
  1855.      break;
  1856.       case GL_DEPTH_FUNC:
  1857.      *params = (GLfloat) ctx->Depth.Func;
  1858.      break;
  1859.       case GL_DEPTH_RANGE:
  1860.          params[0] = (GLfloat) ctx->Viewport.Near;
  1861.          params[1] = (GLfloat) ctx->Viewport.Far;
  1862.      break;
  1863.       case GL_DEPTH_SCALE:
  1864.      *params = (GLfloat) ctx->Pixel.DepthScale;
  1865.      break;
  1866.       case GL_DEPTH_TEST:
  1867.      *params = (GLfloat) ctx->Depth.Test;
  1868.      break;
  1869.       case GL_DEPTH_WRITEMASK:
  1870.      *params = (GLfloat) ctx->Depth.Mask;
  1871.      break;
  1872.       case GL_DITHER:
  1873.      *params = (GLfloat) ctx->Color.DitherFlag;
  1874.      break;
  1875.       case GL_DOUBLEBUFFER:
  1876.      *params = (GLfloat) ctx->Visual->DBflag;
  1877.      break;
  1878.       case GL_DRAW_BUFFER:
  1879.      *params = (GLfloat) ctx->Color.DrawBuffer;
  1880.      break;
  1881.       case GL_EDGE_FLAG:
  1882.      *params = (GLfloat) ctx->Current.EdgeFlag;
  1883.      break;
  1884.       case GL_FEEDBACK_BUFFER_SIZE:
  1885.          /* TODO: is this right?  Or, return number of entries in buffer? */
  1886.          *params = (GLfloat) ctx->Feedback.BufferSize;
  1887.          break;
  1888.       case GL_FEEDBACK_BUFFER_TYPE:
  1889.          *params = (GLfloat) ctx->Feedback.Type;
  1890.          break;
  1891.       case GL_FOG:
  1892.      *params = (GLfloat) ctx->Fog.Enabled;
  1893.      break;
  1894.       case GL_FOG_COLOR:
  1895.      params[0] = ctx->Fog.Color[0];
  1896.      params[1] = ctx->Fog.Color[1];
  1897.      params[2] = ctx->Fog.Color[2];
  1898.      params[3] = ctx->Fog.Color[3];
  1899.      break;
  1900.       case GL_FOG_DENSITY:
  1901.      *params = ctx->Fog.Density;
  1902.      break;
  1903.       case GL_FOG_END:
  1904.      *params = ctx->Fog.End;
  1905.      break;
  1906.       case GL_FOG_HINT:
  1907.      *params = (GLfloat) ctx->Hint.Fog;
  1908.      break;
  1909.       case GL_FOG_INDEX:
  1910.      *params = ctx->Fog.Index;
  1911.      break;
  1912.       case GL_FOG_MODE:
  1913.      *params = (GLfloat) ctx->Fog.Mode;
  1914.      break;
  1915.       case GL_FOG_START:
  1916.      *params = ctx->Fog.Start;
  1917.      break;
  1918.       case GL_FRONT_FACE:
  1919.      *params = (GLfloat) ctx->Polygon.FrontFace;
  1920.      break;
  1921.       case GL_GREEN_BIAS:
  1922.          *params = (GLfloat) ctx->Pixel.GreenBias;
  1923.          break;
  1924.       case GL_GREEN_BITS:
  1925.          *params = (GLfloat) bits( ctx->Visual->GreenScale );
  1926.          break;
  1927.       case GL_GREEN_SCALE:
  1928.          *params = (GLfloat) ctx->Pixel.GreenScale;
  1929.          break;
  1930.       case GL_INDEX_BITS:
  1931.          *params = (GLfloat) ctx->Visual->IndexBits;
  1932.      break;
  1933.       case GL_INDEX_CLEAR_VALUE:
  1934.          *params = (GLfloat) ctx->Color.ClearIndex;
  1935.      break;
  1936.       case GL_INDEX_MODE:
  1937.      *params = ctx->Visual->RGBAflag ? 0.0F : 1.0F;
  1938.      break;
  1939.       case GL_INDEX_OFFSET:
  1940.      *params = (GLfloat) ctx->Pixel.IndexOffset;
  1941.      break;
  1942.       case GL_INDEX_SHIFT:
  1943.      *params = (GLfloat) ctx->Pixel.IndexShift;
  1944.      break;
  1945.       case GL_INDEX_WRITEMASK:
  1946.      *params = (GLfloat) ctx->Color.IndexMask;
  1947.      break;
  1948.       case GL_LIGHT0:
  1949.       case GL_LIGHT1:
  1950.       case GL_LIGHT2:
  1951.       case GL_LIGHT3:
  1952.       case GL_LIGHT4:
  1953.       case GL_LIGHT5:
  1954.       case GL_LIGHT6:
  1955.       case GL_LIGHT7:
  1956.      *params = (GLfloat) ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  1957.      break;
  1958.       case GL_LIGHTING:
  1959.      *params = (GLfloat) ctx->Light.Enabled;
  1960.      break;
  1961.       case GL_LIGHT_MODEL_AMBIENT:
  1962.      params[0] = ctx->Light.Model.Ambient[0];
  1963.      params[1] = ctx->Light.Model.Ambient[1];
  1964.      params[2] = ctx->Light.Model.Ambient[2];
  1965.      params[3] = ctx->Light.Model.Ambient[3];
  1966.      break;
  1967.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  1968.      *params = (GLfloat) ctx->Light.Model.LocalViewer;
  1969.      break;
  1970.       case GL_LIGHT_MODEL_TWO_SIDE:
  1971.      *params = (GLfloat) ctx->Light.Model.TwoSide;
  1972.      break;
  1973.       case GL_LINE_SMOOTH:
  1974.      *params = (GLfloat) ctx->Line.SmoothFlag;
  1975.      break;
  1976.       case GL_LINE_SMOOTH_HINT:
  1977.      *params = (GLfloat) ctx->Hint.LineSmooth;
  1978.      break;
  1979.       case GL_LINE_STIPPLE:
  1980.      *params = (GLfloat) ctx->Line.StippleFlag;
  1981.      break;
  1982.       case GL_LINE_STIPPLE_PATTERN:
  1983.          *params = (GLfloat) ctx->Line.StipplePattern;
  1984.          break;
  1985.       case GL_LINE_STIPPLE_REPEAT:
  1986.          *params = (GLfloat) ctx->Line.StippleFactor;
  1987.          break;
  1988.       case GL_LINE_WIDTH:
  1989.      *params = (GLfloat) ctx->Line.Width;
  1990.      break;
  1991.       case GL_LINE_WIDTH_GRANULARITY:
  1992.      *params = (GLfloat) LINE_WIDTH_GRANULARITY;
  1993.      break;
  1994.       case GL_LINE_WIDTH_RANGE:
  1995.      params[0] = (GLfloat) MIN_LINE_WIDTH;
  1996.      params[1] = (GLfloat) MAX_LINE_WIDTH;
  1997.      break;
  1998.       case GL_LIST_BASE:
  1999.      *params = (GLfloat) ctx->List.ListBase;
  2000.      break;
  2001.       case GL_LIST_INDEX:
  2002.      *params = (GLfloat) gl_list_index();
  2003.      break;
  2004.       case GL_LIST_MODE:
  2005.      *params = ctx->ExecuteFlag ? (GLfloat) GL_COMPILE_AND_EXECUTE
  2006.                      : (GLfloat) GL_COMPILE;
  2007.      break;
  2008.       case GL_INDEX_LOGIC_OP:
  2009.      *params = (GLfloat) ctx->Color.IndexLogicOpEnabled;
  2010.      break;
  2011.       case GL_COLOR_LOGIC_OP:
  2012.      *params = (GLfloat) ctx->Color.ColorLogicOpEnabled;
  2013.      break;
  2014.       case GL_LOGIC_OP_MODE:
  2015.          *params = (GLfloat) ctx->Color.LogicOp;
  2016.      break;
  2017.       case GL_MAP1_COLOR_4:
  2018.      *params = (GLfloat) ctx->Eval.Map1Color4;
  2019.      break;
  2020.       case GL_MAP1_GRID_DOMAIN:
  2021.      params[0] = ctx->Eval.MapGrid1u1;
  2022.      params[1] = ctx->Eval.MapGrid1u2;
  2023.      break;
  2024.       case GL_MAP1_GRID_SEGMENTS:
  2025.      *params = (GLfloat) ctx->Eval.MapGrid1un;
  2026.      break;
  2027.       case GL_MAP1_INDEX:
  2028.      *params = (GLfloat) ctx->Eval.Map1Index;
  2029.      break;
  2030.       case GL_MAP1_NORMAL:
  2031.      *params = (GLfloat) ctx->Eval.Map1Normal;
  2032.      break;
  2033.       case GL_MAP1_TEXTURE_COORD_1:
  2034.      *params = (GLfloat) ctx->Eval.Map1TextureCoord1;
  2035.      break;
  2036.       case GL_MAP1_TEXTURE_COORD_2:
  2037.      *params = (GLfloat) ctx->Eval.Map1TextureCoord2;
  2038.      break;
  2039.       case GL_MAP1_TEXTURE_COORD_3:
  2040.      *params = (GLfloat) ctx->Eval.Map1TextureCoord3;
  2041.      break;
  2042.       case GL_MAP1_TEXTURE_COORD_4:
  2043.      *params = (GLfloat) ctx->Eval.Map1TextureCoord4;
  2044.      break;
  2045.       case GL_MAP1_VERTEX_3:
  2046.      *params = (GLfloat) ctx->Eval.Map1Vertex3;
  2047.      break;
  2048.       case GL_MAP1_VERTEX_4:
  2049.      *params = (GLfloat) ctx->Eval.Map1Vertex4;
  2050.      break;
  2051.       case GL_MAP2_COLOR_4:
  2052.      *params = (GLfloat) ctx->Eval.Map2Color4;
  2053.      break;
  2054.       case GL_MAP2_GRID_DOMAIN:
  2055.      params[0] = ctx->Eval.MapGrid2u1;
  2056.      params[1] = ctx->Eval.MapGrid2u2;
  2057.      params[2] = ctx->Eval.MapGrid2v1;
  2058.      params[3] = ctx->Eval.MapGrid2v2;
  2059.      break;
  2060.       case GL_MAP2_GRID_SEGMENTS:
  2061.      params[0] = (GLfloat) ctx->Eval.MapGrid2un;
  2062.      params[1] = (GLfloat) ctx->Eval.MapGrid2vn;
  2063.      break;
  2064.       case GL_MAP2_INDEX:
  2065.      *params = (GLfloat) ctx->Eval.Map2Index;
  2066.      break;
  2067.       case GL_MAP2_NORMAL:
  2068.      *params = (GLfloat) ctx->Eval.Map2Normal;
  2069.      break;
  2070.       case GL_MAP2_TEXTURE_COORD_1:
  2071.      *params = ctx->Eval.Map2TextureCoord1;
  2072.      break;
  2073.       case GL_MAP2_TEXTURE_COORD_2:
  2074.      *params = ctx->Eval.Map2TextureCoord2;
  2075.      break;
  2076.       case GL_MAP2_TEXTURE_COORD_3:
  2077.      *params = ctx->Eval.Map2TextureCoord3;
  2078.      break;
  2079.       case GL_MAP2_TEXTURE_COORD_4:
  2080.      *params = ctx->Eval.Map2TextureCoord4;
  2081.      break;
  2082.       case GL_MAP2_VERTEX_3:
  2083.      *params = (GLfloat) ctx->Eval.Map2Vertex3;
  2084.      break;
  2085.       case GL_MAP2_VERTEX_4:
  2086.      *params = (GLfloat) ctx->Eval.Map2Vertex4;
  2087.      break;
  2088.       case GL_MAP_COLOR:
  2089.      *params = (GLfloat) ctx->Pixel.MapColorFlag;
  2090.      break;
  2091.       case GL_MAP_STENCIL:
  2092.      *params = (GLfloat) ctx->Pixel.MapStencilFlag;
  2093.      break;
  2094.       case GL_MATRIX_MODE:
  2095.      *params = (GLfloat) ctx->Transform.MatrixMode;
  2096.      break;
  2097.       case GL_MAX_ATTRIB_STACK_DEPTH:
  2098.      *params = (GLfloat) MAX_ATTRIB_STACK_DEPTH;
  2099.      break;
  2100.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  2101.          *params = (GLfloat) MAX_CLIENT_ATTRIB_STACK_DEPTH;
  2102.          break;
  2103.       case GL_MAX_CLIP_PLANES:
  2104.      *params = (GLfloat) MAX_CLIP_PLANES;
  2105.      break;
  2106.       case GL_MAX_EVAL_ORDER:
  2107.      *params = (GLfloat) MAX_EVAL_ORDER;
  2108.      break;
  2109.       case GL_MAX_LIGHTS:
  2110.      *params = (GLfloat) MAX_LIGHTS;
  2111.      break;
  2112.       case GL_MAX_LIST_NESTING:
  2113.      *params = (GLfloat) MAX_LIST_NESTING;
  2114.      break;
  2115.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  2116.      *params = (GLfloat) MAX_MODELVIEW_STACK_DEPTH;
  2117.      break;
  2118.       case GL_MAX_NAME_STACK_DEPTH:
  2119.      *params = (GLfloat) MAX_NAME_STACK_DEPTH;
  2120.      break;
  2121.       case GL_MAX_PIXEL_MAP_TABLE:
  2122.      *params = (GLfloat) MAX_PIXEL_MAP_TABLE;
  2123.      break;
  2124.       case GL_MAX_PROJECTION_STACK_DEPTH:
  2125.      *params = (GLfloat) MAX_PROJECTION_STACK_DEPTH;
  2126.      break;
  2127.       case GL_MAX_TEXTURE_SIZE:
  2128.      *params = (GLfloat) MAX_TEXTURE_SIZE;
  2129.      break;
  2130.       case GL_MAX_TEXTURE_STACK_DEPTH:
  2131.      *params = (GLfloat) MAX_TEXTURE_STACK_DEPTH;
  2132.      break;
  2133.       case GL_MAX_VIEWPORT_DIMS:
  2134.          params[0] = (GLfloat) MAX_WIDTH;
  2135.          params[1] = (GLfloat) MAX_HEIGHT;
  2136.          break;
  2137.       case GL_MODELVIEW_MATRIX:
  2138.      for (i=0;i<16;i++) {
  2139.         params[i] = ctx->ModelViewMatrix[i];
  2140.      }
  2141.      break;
  2142.       case GL_MODELVIEW_STACK_DEPTH:
  2143.      *params = (GLfloat) ctx->ModelViewStackDepth;
  2144.      break;
  2145.       case GL_NAME_STACK_DEPTH:
  2146.      *params = (GLfloat) ctx->Select.NameStackDepth;
  2147.      break;
  2148.       case GL_NORMALIZE:
  2149.      *params = (GLfloat) ctx->Transform.Normalize;
  2150.      break;
  2151.       case GL_PACK_ALIGNMENT:
  2152.      *params = (GLfloat) ctx->Pack.Alignment;
  2153.      break;
  2154.       case GL_PACK_LSB_FIRST:
  2155.      *params = (GLfloat) ctx->Pack.LsbFirst;
  2156.      break;
  2157.       case GL_PACK_ROW_LENGTH:
  2158.      *params = (GLfloat) ctx->Pack.RowLength;
  2159.      break;
  2160.       case GL_PACK_SKIP_PIXELS:
  2161.      *params = (GLfloat) ctx->Pack.SkipPixels;
  2162.      break;
  2163.       case GL_PACK_SKIP_ROWS:
  2164.      *params = (GLfloat) ctx->Pack.SkipRows;
  2165.      break;
  2166.       case GL_PACK_SWAP_BYTES:
  2167.      *params = (GLfloat) ctx->Pack.SwapBytes;
  2168.      break;
  2169.       case GL_PACK_SKIP_IMAGES_EXT:
  2170.          *params = (GLfloat) ctx->Pack.SkipImages;
  2171.          break;
  2172.       case GL_PACK_IMAGE_HEIGHT_EXT:
  2173.          *params = (GLfloat) ctx->Pack.ImageHeight;
  2174.          break;
  2175.       case GL_PERSPECTIVE_CORRECTION_HINT:
  2176.      *params = (GLfloat) ctx->Hint.PerspectiveCorrection;
  2177.      break;
  2178.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  2179.      *params = (GLfloat) ctx->Pixel.MapAtoAsize;
  2180.      break;
  2181.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  2182.      *params = (GLfloat) ctx->Pixel.MapBtoBsize;
  2183.      break;
  2184.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  2185.      *params = (GLfloat) ctx->Pixel.MapGtoGsize;
  2186.      break;
  2187.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  2188.      *params = (GLfloat) ctx->Pixel.MapItoAsize;
  2189.      break;
  2190.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  2191.      *params = (GLfloat) ctx->Pixel.MapItoBsize;
  2192.      break;
  2193.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  2194.      *params = (GLfloat) ctx->Pixel.MapItoGsize;
  2195.      break;
  2196.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  2197.      *params = (GLfloat) ctx->Pixel.MapItoIsize;
  2198.      break;
  2199.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  2200.      *params = (GLfloat) ctx->Pixel.MapItoRsize;
  2201.      break;
  2202.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  2203.      *params = (GLfloat) ctx->Pixel.MapRtoRsize;
  2204.      break;
  2205.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  2206.      *params = (GLfloat) ctx->Pixel.MapStoSsize;
  2207.      break;
  2208.       case GL_POINT_SIZE:
  2209.          *params = (GLfloat) ctx->Point.Size;
  2210.          break;
  2211.       case GL_POINT_SIZE_GRANULARITY:
  2212.      *params = (GLfloat) POINT_SIZE_GRANULARITY;
  2213.      break;
  2214.       case GL_POINT_SIZE_RANGE:
  2215.      params[0] = (GLfloat) MIN_POINT_SIZE;
  2216.      params[1] = (GLfloat) MAX_POINT_SIZE;
  2217.      break;
  2218.       case GL_POINT_SMOOTH:
  2219.      *params = (GLfloat) ctx->Point.SmoothFlag;
  2220.      break;
  2221.       case GL_POINT_SMOOTH_HINT:
  2222.      *params = (GLfloat) ctx->Hint.PointSmooth;
  2223.      break;
  2224.       case GL_POLYGON_MODE:
  2225.      params[0] = (GLfloat) ctx->Polygon.FrontMode;
  2226.      params[1] = (GLfloat) ctx->Polygon.BackMode;
  2227.      break;
  2228. #ifdef GL_EXT_polygon_offset
  2229.       case GL_POLYGON_OFFSET_BIAS_EXT:
  2230.          *params = ctx->Polygon.OffsetUnits;
  2231.          break;
  2232. #endif
  2233.       case GL_POLYGON_OFFSET_FACTOR:
  2234.          *params = ctx->Polygon.OffsetFactor;
  2235.          break;
  2236.       case GL_POLYGON_OFFSET_UNITS:
  2237.          *params = ctx->Polygon.OffsetUnits;
  2238.          break;
  2239.       case GL_POLYGON_SMOOTH:
  2240.      *params = (GLfloat) ctx->Polygon.SmoothFlag;
  2241.      break;
  2242.       case GL_POLYGON_SMOOTH_HINT:
  2243.      *params = (GLfloat) ctx->Hint.PolygonSmooth;
  2244.      break;
  2245.       case GL_POLYGON_STIPPLE:
  2246.      for (i=0;i<32;i++) {        /* RIGHT? */
  2247.         params[i] = (GLfloat) ctx->PolygonStipple[i];
  2248.      }
  2249.      break;
  2250.       case GL_PROJECTION_MATRIX:
  2251.      for (i=0;i<16;i++) {
  2252.         params[i] = ctx->ProjectionMatrix[i];
  2253.      }
  2254.      break;
  2255.       case GL_PROJECTION_STACK_DEPTH:
  2256.      *params = (GLfloat) ctx->ProjectionStackDepth;
  2257.      break;
  2258.       case GL_READ_BUFFER:
  2259.      *params = (GLfloat) ctx->Pixel.ReadBuffer;
  2260.      break;
  2261.       case GL_RED_BIAS:
  2262.          *params = ctx->Pixel.RedBias;
  2263.          break;
  2264.       case GL_RED_BITS:
  2265.          *params = (GLfloat) bits( ctx->Visual->RedScale );
  2266.          break;
  2267.       case GL_RED_SCALE:
  2268.          *params = ctx->Pixel.RedScale;
  2269.          break;
  2270.       case GL_RENDER_MODE:
  2271.      *params = (GLfloat) ctx->RenderMode;
  2272.      break;
  2273.       case GL_RGBA_MODE:
  2274.      *params = (GLfloat) ctx->Visual->RGBAflag;
  2275.      break;
  2276.       case GL_SCISSOR_BOX:
  2277.      params[0] = (GLfloat) ctx->Scissor.X;
  2278.      params[1] = (GLfloat) ctx->Scissor.Y;
  2279.      params[2] = (GLfloat) ctx->Scissor.Width;
  2280.      params[3] = (GLfloat) ctx->Scissor.Height;
  2281.      break;
  2282.       case GL_SCISSOR_TEST:
  2283.      *params = (GLfloat) ctx->Scissor.Enabled;
  2284.      break;
  2285.       case GL_SHADE_MODEL:
  2286.      *params = (GLfloat) ctx->Light.ShadeModel;
  2287.      break;
  2288.       case GL_STENCIL_BITS:
  2289.          *params = (GLfloat) (8*sizeof(GLstencil));
  2290.          break;
  2291.       case GL_STENCIL_CLEAR_VALUE:
  2292.      *params = (GLfloat) ctx->Stencil.Clear;
  2293.      break;
  2294.       case GL_STENCIL_FAIL:
  2295.      *params = (GLfloat) ctx->Stencil.FailFunc;
  2296.      break;
  2297.       case GL_STENCIL_FUNC:
  2298.      *params = (GLfloat) ctx->Stencil.Function;
  2299.      break;
  2300.       case GL_STENCIL_PASS_DEPTH_FAIL:
  2301.      *params = (GLfloat) ctx->Stencil.ZFailFunc;
  2302.      break;
  2303.       case GL_STENCIL_PASS_DEPTH_PASS:
  2304.      *params = (GLfloat) ctx->Stencil.ZPassFunc;
  2305.      break;
  2306.       case GL_STENCIL_REF:
  2307.      *params = (GLfloat) ctx->Stencil.Ref;
  2308.      break;
  2309.       case GL_STENCIL_TEST:
  2310.      *params = (GLfloat) ctx->Stencil.Enabled;
  2311.      break;
  2312.       case GL_STENCIL_VALUE_MASK:
  2313.      *params = (GLfloat) ctx->Stencil.ValueMask;
  2314.      break;
  2315.       case GL_STENCIL_WRITEMASK:
  2316.      *params = (GLfloat) ctx->Stencil.WriteMask;
  2317.      break;
  2318.       case GL_STEREO:
  2319.      *params = 0.0F;  /* TODO */
  2320.      break;
  2321.       case GL_SUBPIXEL_BITS:
  2322.      *params = 0.0F;  /* TODO */
  2323.      break;
  2324.       case GL_TEXTURE_1D:
  2325.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? 1.0 : 0.0;
  2326.      break;
  2327.       case GL_TEXTURE_2D:
  2328.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? 1.0 : 0.0;
  2329.      break;
  2330.       case GL_TEXTURE_3D_EXT:
  2331.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? 1.0 : 0.0;
  2332.      break;
  2333.       case GL_TEXTURE_ENV_COLOR:
  2334.      params[0] = ctx->Texture.EnvColor[0];
  2335.      params[1] = ctx->Texture.EnvColor[1];
  2336.      params[2] = ctx->Texture.EnvColor[2];
  2337.      params[3] = ctx->Texture.EnvColor[3];
  2338.      break;
  2339.       case GL_TEXTURE_ENV_MODE:
  2340.      *params = (GLfloat) ctx->Texture.EnvMode;
  2341.      break;
  2342.       case GL_TEXTURE_GEN_S:
  2343.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? 1.0 : 0.0;
  2344.      break;
  2345.       case GL_TEXTURE_GEN_T:
  2346.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? 1.0 : 0.0;
  2347.      break;
  2348.       case GL_TEXTURE_GEN_R:
  2349.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? 1.0 : 0.0;
  2350.      break;
  2351.       case GL_TEXTURE_GEN_Q:
  2352.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? 1.0 : 0.0;
  2353.      break;
  2354.       case GL_TEXTURE_MATRIX:
  2355.          for (i=0;i<16;i++) {
  2356.         params[i] = ctx->TextureMatrix[i];
  2357.      }
  2358.      break;
  2359.       case GL_TEXTURE_STACK_DEPTH:
  2360.      *params = (GLfloat) ctx->TextureStackDepth;
  2361.      break;
  2362.       case GL_UNPACK_ALIGNMENT:
  2363.      *params = (GLfloat) ctx->Unpack.Alignment;
  2364.      break;
  2365.       case GL_UNPACK_LSB_FIRST:
  2366.      *params = (GLfloat) ctx->Unpack.LsbFirst;
  2367.      break;
  2368.       case GL_UNPACK_ROW_LENGTH:
  2369.      *params = (GLfloat) ctx->Unpack.RowLength;
  2370.      break;
  2371.       case GL_UNPACK_SKIP_PIXELS:
  2372.      *params = (GLfloat) ctx->Unpack.SkipPixels;
  2373.      break;
  2374.       case GL_UNPACK_SKIP_ROWS:
  2375.      *params = (GLfloat) ctx->Unpack.SkipRows;
  2376.      break;
  2377.       case GL_UNPACK_SWAP_BYTES:
  2378.      *params = (GLfloat) ctx->Unpack.SwapBytes;
  2379.      break;
  2380.       case GL_UNPACK_SKIP_IMAGES_EXT:
  2381.          *params = (GLfloat) ctx->Unpack.SkipImages;
  2382.          break;
  2383.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  2384.          *params = (GLfloat) ctx->Unpack.ImageHeight;
  2385.          break;
  2386.       case GL_VIEWPORT:
  2387.      params[0] = (GLfloat) ctx->Viewport.X;
  2388.      params[1] = (GLfloat) ctx->Viewport.Y;
  2389.      params[2] = (GLfloat) ctx->Viewport.Width;
  2390.      params[3] = (GLfloat) ctx->Viewport.Height;
  2391.      break;
  2392.       case GL_ZOOM_X:
  2393.      *params = (GLfloat) ctx->Pixel.ZoomX;
  2394.      break;
  2395.       case GL_ZOOM_Y:
  2396.      *params = (GLfloat) ctx->Pixel.ZoomY;
  2397.      break;
  2398.       case GL_VERTEX_ARRAY_SIZE:
  2399.          *params = (GLfloat) ctx->Array.VertexSize;
  2400.          break;
  2401.       case GL_VERTEX_ARRAY_TYPE:
  2402.          *params = (GLfloat) ctx->Array.VertexType;
  2403.          break;
  2404.       case GL_VERTEX_ARRAY_STRIDE:
  2405.          *params = (GLfloat) ctx->Array.VertexStride;
  2406.          break;
  2407.       case GL_VERTEX_ARRAY_COUNT_EXT:
  2408.          *params = 0.0;
  2409.          break;
  2410.       case GL_NORMAL_ARRAY_TYPE:
  2411.          *params = (GLfloat) ctx->Array.NormalType;
  2412.          break;
  2413.       case GL_NORMAL_ARRAY_STRIDE:
  2414.          *params = (GLfloat) ctx->Array.NormalStride;
  2415.          break;
  2416.       case GL_NORMAL_ARRAY_COUNT_EXT:
  2417.          *params = 0.0;
  2418.          break;
  2419.       case GL_COLOR_ARRAY_SIZE:
  2420.          *params = (GLfloat) ctx->Array.ColorSize;
  2421.          break;
  2422.       case GL_COLOR_ARRAY_TYPE:
  2423.          *params = (GLfloat) ctx->Array.ColorType;
  2424.          break;
  2425.       case GL_COLOR_ARRAY_STRIDE:
  2426.          *params = (GLfloat) ctx->Array.ColorStride;
  2427.          break;
  2428.       case GL_COLOR_ARRAY_COUNT_EXT:
  2429.          *params = 0.0;
  2430.          break;
  2431.       case GL_INDEX_ARRAY_TYPE:
  2432.          *params = (GLfloat) ctx->Array.IndexType;
  2433.          break;
  2434.       case GL_INDEX_ARRAY_STRIDE:
  2435.          *params = (GLfloat) ctx->Array.IndexStride;
  2436.          break;
  2437.       case GL_INDEX_ARRAY_COUNT_EXT:
  2438.          *params = 0.0;
  2439.          break;
  2440.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  2441.          *params = (GLfloat) ctx->Array.TexCoordSize;
  2442.          break;
  2443.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  2444.          *params = (GLfloat) ctx->Array.TexCoordType;
  2445.          break;
  2446.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  2447.          *params = (GLfloat) ctx->Array.TexCoordStride;
  2448.          break;
  2449.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  2450.          *params = 0.0;
  2451.          break;
  2452.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  2453.          *params = (GLfloat) ctx->Array.EdgeFlagStride;
  2454.          break;
  2455.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  2456.          *params = 0.0;
  2457.          break;
  2458.       case GL_TEXTURE_BINDING_1D:
  2459.          *params = (GLfloat) ctx->Texture.Current1D->Name;
  2460.           break;
  2461.       case GL_TEXTURE_BINDING_2D:
  2462.          *params = (GLfloat) ctx->Texture.Current2D->Name;
  2463.           break;
  2464.       case GL_TEXTURE_3D_BINDING_EXT:
  2465.          *params = (GLfloat) ctx->Texture.Current2D->Name;
  2466.           break;
  2467.  
  2468.       default:
  2469.          gl_error( ctx, GL_INVALID_ENUM, "glGetFloatv" );
  2470.    }
  2471. }
  2472.  
  2473.  
  2474.  
  2475.  
  2476. void gl_GetIntegerv( GLcontext *ctx, GLenum pname, GLint *params )
  2477. {
  2478.    GLuint i;
  2479.  
  2480.    if (INSIDE_BEGIN_END(ctx)) {
  2481.       gl_error( ctx, GL_INVALID_OPERATION, "glGetIntegerv" );
  2482.       return;
  2483.    }
  2484.    switch (pname) {
  2485.       case GL_ACCUM_RED_BITS:
  2486.       case GL_ACCUM_GREEN_BITS:
  2487.       case GL_ACCUM_BLUE_BITS:
  2488.       case GL_ACCUM_ALPHA_BITS:
  2489.          *params = (GLint) (sizeof(GLaccum)*8);
  2490.          break;
  2491.       case GL_ACCUM_CLEAR_VALUE:
  2492.          params[0] = FLOAT_TO_INT( ctx->Accum.ClearColor[0] );
  2493.          params[1] = FLOAT_TO_INT( ctx->Accum.ClearColor[1] );
  2494.          params[2] = FLOAT_TO_INT( ctx->Accum.ClearColor[2] );
  2495.          params[3] = FLOAT_TO_INT( ctx->Accum.ClearColor[3] );
  2496.          break;
  2497.       case GL_ALPHA_BIAS:
  2498.          *params = (GLint) ctx->Pixel.AlphaBias;
  2499.          break;
  2500.       case GL_ALPHA_BITS:
  2501.          if (ctx->Visual->FrontAlphaEnabled || ctx->Visual->BackAlphaEnabled) {
  2502.             *params = 8*sizeof(GLubyte);
  2503.          }
  2504.          else {
  2505.             *params = 0;
  2506.          }
  2507.          break;
  2508.       case GL_ALPHA_SCALE:
  2509.          *params = (GLint) ctx->Pixel.AlphaScale;
  2510.          break;
  2511.       case GL_ALPHA_TEST:
  2512.          *params = (GLint) ctx->Color.AlphaEnabled;
  2513.          break;
  2514.       case GL_ALPHA_TEST_REF:
  2515.          *params = FLOAT_TO_INT( ctx->Color.AlphaRef );
  2516.          break;
  2517.       case GL_ALPHA_TEST_FUNC:
  2518.          *params = (GLint) ctx->Color.AlphaFunc;
  2519.          break;
  2520.       case GL_ATTRIB_STACK_DEPTH:
  2521.          *params = (GLint) ctx->AttribStackDepth;
  2522.          break;
  2523.       case GL_AUTO_NORMAL:
  2524.          *params = (GLint) ctx->Eval.AutoNormal;
  2525.          break;
  2526.       case GL_AUX_BUFFERS:
  2527.          *params = (GLint) NUM_AUX_BUFFERS;
  2528.          break;
  2529.       case GL_BLEND:
  2530.          *params = (GLint) ctx->Color.BlendEnabled;
  2531.          break;
  2532.       case GL_BLEND_DST:
  2533.          *params = (GLint) ctx->Color.BlendDst;
  2534.          break;
  2535.       case GL_BLEND_SRC:
  2536.          *params = (GLint) ctx->Color.BlendSrc;
  2537.          break;
  2538.       case GL_BLEND_EQUATION_EXT:
  2539.      *params = (GLint) ctx->Color.BlendEquation;
  2540.      break;
  2541.       case GL_BLEND_COLOR_EXT:
  2542.      params[0] = FLOAT_TO_INT( ctx->Color.BlendColor[0] );
  2543.      params[1] = FLOAT_TO_INT( ctx->Color.BlendColor[1] );
  2544.      params[2] = FLOAT_TO_INT( ctx->Color.BlendColor[2] );
  2545.      params[3] = FLOAT_TO_INT( ctx->Color.BlendColor[3] );
  2546.      break;
  2547.       case GL_BLUE_BIAS:
  2548.          *params = (GLint) ctx->Pixel.BlueBias;
  2549.          break;
  2550.       case GL_BLUE_BITS:
  2551.          *params = (GLint) bits( ctx->Visual->BlueScale );
  2552.          break;
  2553.       case GL_BLUE_SCALE:
  2554.          *params = (GLint) ctx->Pixel.BlueScale;
  2555.          break;
  2556.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  2557.          *params = ctx->ClientAttribStackDepth;
  2558.          break;
  2559.       case GL_CLIP_PLANE0:
  2560.       case GL_CLIP_PLANE1:
  2561.       case GL_CLIP_PLANE2:
  2562.       case GL_CLIP_PLANE3:
  2563.       case GL_CLIP_PLANE4:
  2564.       case GL_CLIP_PLANE5:
  2565.          i = (GLint) (pname - GL_CLIP_PLANE0);
  2566.          *params = (GLint) ctx->Transform.ClipEnabled[i];
  2567.          break;
  2568.       case GL_COLOR_CLEAR_VALUE:
  2569.          params[0] = FLOAT_TO_INT( ctx->Color.ClearColor[0] );
  2570.          params[1] = FLOAT_TO_INT( ctx->Color.ClearColor[1] );
  2571.          params[2] = FLOAT_TO_INT( ctx->Color.ClearColor[2] );
  2572.          params[3] = FLOAT_TO_INT( ctx->Color.ClearColor[3] );
  2573.          break;
  2574.       case GL_COLOR_MATERIAL:
  2575.          *params = (GLint) ctx->Light.ColorMaterialEnabled;
  2576.          break;
  2577.       case GL_COLOR_MATERIAL_FACE:
  2578.          *params = (GLint) ctx->Light.ColorMaterialFace;
  2579.          break;
  2580.       case GL_COLOR_MATERIAL_PARAMETER:
  2581.          *params = (GLint) ctx->Light.ColorMaterialMode;
  2582.          break;
  2583.       case GL_COLOR_WRITEMASK:
  2584.          params[0] = (ctx->Color.ColorMask & 8) ? 1 : 0;
  2585.          params[1] = (ctx->Color.ColorMask & 4) ? 1 : 0;
  2586.          params[2] = (ctx->Color.ColorMask & 2) ? 1 : 0;
  2587.          params[3] = (ctx->Color.ColorMask & 1) ? 1 : 0;
  2588.          break;
  2589.       case GL_CULL_FACE:
  2590.          *params = (GLint) ctx->Polygon.CullFlag;
  2591.          break;
  2592.       case GL_CULL_FACE_MODE:
  2593.          *params = (GLint) ctx->Polygon.CullFaceMode;
  2594.          break;
  2595.       case GL_CURRENT_COLOR:
  2596.          params[0] = FLOAT_TO_INT( (ctx->Current.IntColor[0]/ctx->Visual->RedScale) );
  2597.          params[1] = FLOAT_TO_INT( (ctx->Current.IntColor[1]/ctx->Visual->GreenScale) );
  2598.          params[2] = FLOAT_TO_INT( (ctx->Current.IntColor[2]/ctx->Visual->BlueScale) );
  2599.          params[3] = FLOAT_TO_INT( (ctx->Current.IntColor[3]/ctx->Visual->AlphaScale) );
  2600.          break;
  2601.       case GL_CURRENT_INDEX:
  2602.          *params = (GLint) ctx->Current.Index;
  2603.          break;
  2604.       case GL_CURRENT_NORMAL:
  2605.          params[0] = FLOAT_TO_INT( ctx->Current.Normal[0] );
  2606.          params[1] = FLOAT_TO_INT( ctx->Current.Normal[1] );
  2607.          params[2] = FLOAT_TO_INT( ctx->Current.Normal[2] );
  2608.          break;
  2609.       case GL_CURRENT_RASTER_COLOR:
  2610.      params[0] = FLOAT_TO_INT( ctx->Current.RasterColor[0] );
  2611.      params[1] = FLOAT_TO_INT( ctx->Current.RasterColor[1] );
  2612.      params[2] = FLOAT_TO_INT( ctx->Current.RasterColor[2] );
  2613.      params[3] = FLOAT_TO_INT( ctx->Current.RasterColor[3] );
  2614.      break;
  2615.       case GL_CURRENT_RASTER_DISTANCE:
  2616.      params[0] = (GLint) ctx->Current.RasterDistance;
  2617.      break;
  2618.       case GL_CURRENT_RASTER_INDEX:
  2619.      *params = (GLint) ctx->Current.RasterIndex;
  2620.      break;
  2621.       case GL_CURRENT_RASTER_POSITION:
  2622.      params[0] = (GLint) ctx->Current.RasterPos[0];
  2623.      params[1] = (GLint) ctx->Current.RasterPos[1];
  2624.      params[2] = (GLint) ctx->Current.RasterPos[2];
  2625.      params[3] = (GLint) ctx->Current.RasterPos[3];
  2626.      break;
  2627.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  2628.      params[0] = (GLint) ctx->Current.RasterTexCoord[0];
  2629.      params[1] = (GLint) ctx->Current.RasterTexCoord[1];
  2630.      params[2] = (GLint) ctx->Current.RasterTexCoord[2];
  2631.      params[3] = (GLint) ctx->Current.RasterTexCoord[3];
  2632.      break;
  2633.       case GL_CURRENT_RASTER_POSITION_VALID:
  2634.      *params = (GLint) ctx->Current.RasterPosValid;
  2635.      break;
  2636.       case GL_CURRENT_TEXTURE_COORDS:
  2637.          params[0] = (GLint) ctx->Current.TexCoord[0];
  2638.          params[1] = (GLint) ctx->Current.TexCoord[1];
  2639.          params[2] = (GLint) ctx->Current.TexCoord[2];
  2640.          params[3] = (GLint) ctx->Current.TexCoord[3];
  2641.      break;
  2642.       case GL_DEPTH_BIAS:
  2643.          *params = (GLint) ctx->Pixel.DepthBias;
  2644.      break;
  2645.       case GL_DEPTH_BITS:
  2646.      *params = 8*sizeof(GLdepth);
  2647.      break;
  2648.       case GL_DEPTH_CLEAR_VALUE:
  2649.          *params = (GLint) ctx->Depth.Clear;
  2650.      break;
  2651.       case GL_DEPTH_FUNC:
  2652.          *params = (GLint) ctx->Depth.Func;
  2653.      break;
  2654.       case GL_DEPTH_RANGE:
  2655.          params[0] = (GLint) ctx->Viewport.Near;
  2656.          params[1] = (GLint) ctx->Viewport.Far;
  2657.      break;
  2658.       case GL_DEPTH_SCALE:
  2659.          *params = (GLint) ctx->Pixel.DepthScale;
  2660.      break;
  2661.       case GL_DEPTH_TEST:
  2662.          *params = (GLint) ctx->Depth.Test;
  2663.      break;
  2664.       case GL_DEPTH_WRITEMASK:
  2665.      *params = (GLint) ctx->Depth.Mask;
  2666.      break;
  2667.       case GL_DITHER:
  2668.      *params = (GLint) ctx->Color.DitherFlag;
  2669.      break;
  2670.       case GL_DOUBLEBUFFER:
  2671.      *params = (GLint) ctx->Visual->DBflag;
  2672.      break;
  2673.       case GL_DRAW_BUFFER:
  2674.      *params = (GLint) ctx->Color.DrawBuffer;
  2675.      break;
  2676.       case GL_EDGE_FLAG:
  2677.      *params = (GLint) ctx->Current.EdgeFlag;
  2678.      break;
  2679.       case GL_FEEDBACK_BUFFER_SIZE:
  2680.          /* TODO: is this right?  Or, return number of entries in buffer? */
  2681.          *params = ctx->Feedback.BufferSize;
  2682.          break;
  2683.       case GL_FEEDBACK_BUFFER_TYPE:
  2684.          *params = ctx->Feedback.Type;
  2685.          break;
  2686.       case GL_FOG:
  2687.      *params = (GLint) ctx->Fog.Enabled;
  2688.      break;
  2689.       case GL_FOG_COLOR:
  2690.      params[0] = FLOAT_TO_INT( ctx->Fog.Color[0] );
  2691.      params[1] = FLOAT_TO_INT( ctx->Fog.Color[1] );
  2692.      params[2] = FLOAT_TO_INT( ctx->Fog.Color[2] );
  2693.      params[3] = FLOAT_TO_INT( ctx->Fog.Color[3] );
  2694.      break;
  2695.       case GL_FOG_DENSITY:
  2696.      *params = (GLint) ctx->Fog.Density;
  2697.      break;
  2698.       case GL_FOG_END:
  2699.      *params = (GLint) ctx->Fog.End;
  2700.      break;
  2701.       case GL_FOG_HINT:
  2702.      *params = (GLint) ctx->Hint.Fog;
  2703.      break;
  2704.       case GL_FOG_INDEX:
  2705.      *params = (GLint) ctx->Fog.Index;
  2706.      break;
  2707.       case GL_FOG_MODE:
  2708.      *params = (GLint) ctx->Fog.Mode;
  2709.      break;
  2710.       case GL_FOG_START:
  2711.      *params = (GLint) ctx->Fog.Start;
  2712.      break;
  2713.       case GL_FRONT_FACE:
  2714.      *params = (GLint) ctx->Polygon.FrontFace;
  2715.      break;
  2716.       case GL_GREEN_BIAS:
  2717.          *params = (GLint) ctx->Pixel.GreenBias;
  2718.          break;
  2719.       case GL_GREEN_BITS:
  2720.          *params = (GLint) bits( ctx->Visual->GreenScale );
  2721.          break;
  2722.       case GL_GREEN_SCALE:
  2723.          *params = (GLint) ctx->Pixel.GreenScale;
  2724.          break;
  2725.       case GL_INDEX_BITS:
  2726.          *params = (GLint) ctx->Visual->IndexBits;
  2727.          break;
  2728.       case GL_INDEX_CLEAR_VALUE:
  2729.          *params = (GLint) ctx->Color.ClearIndex;
  2730.          break;
  2731.       case GL_INDEX_MODE:
  2732.      *params = ctx->Visual->RGBAflag ? 0 : 1;
  2733.      break;
  2734.       case GL_INDEX_OFFSET:
  2735.      *params = ctx->Pixel.IndexOffset;
  2736.      break;
  2737.       case GL_INDEX_SHIFT:
  2738.      *params = ctx->Pixel.IndexShift;
  2739.      break;
  2740.       case GL_INDEX_WRITEMASK:
  2741.      *params = (GLint) ctx->Color.IndexMask;
  2742.      break;
  2743.       case GL_LIGHT0:
  2744.       case GL_LIGHT1:
  2745.       case GL_LIGHT2:
  2746.       case GL_LIGHT3:
  2747.       case GL_LIGHT4:
  2748.       case GL_LIGHT5:
  2749.       case GL_LIGHT6:
  2750.       case GL_LIGHT7:
  2751.      *params = (GLint) ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  2752.      break;
  2753.       case GL_LIGHTING:
  2754.      *params = (GLint) ctx->Light.Enabled;
  2755.      break;
  2756.       case GL_LIGHT_MODEL_AMBIENT:
  2757.      params[0] = FLOAT_TO_INT( ctx->Light.Model.Ambient[0] );
  2758.      params[1] = FLOAT_TO_INT( ctx->Light.Model.Ambient[1] );
  2759.      params[2] = FLOAT_TO_INT( ctx->Light.Model.Ambient[2] );
  2760.      params[3] = FLOAT_TO_INT( ctx->Light.Model.Ambient[3] );
  2761.      break;
  2762.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  2763.      *params = (GLint) ctx->Light.Model.LocalViewer;
  2764.      break;
  2765.       case GL_LIGHT_MODEL_TWO_SIDE:
  2766.      *params = (GLint) ctx->Light.Model.TwoSide;
  2767.      break;
  2768.       case GL_LINE_SMOOTH:
  2769.      *params = (GLint) ctx->Line.SmoothFlag;
  2770.      break;
  2771.       case GL_LINE_SMOOTH_HINT:
  2772.      *params = (GLint) ctx->Hint.LineSmooth;
  2773.      break;
  2774.       case GL_LINE_STIPPLE:
  2775.      *params = (GLint) ctx->Line.StippleFlag;
  2776.      break;
  2777.       case GL_LINE_STIPPLE_PATTERN:
  2778.          *params = (GLint) ctx->Line.StipplePattern;
  2779.          break;
  2780.       case GL_LINE_STIPPLE_REPEAT:
  2781.          *params = (GLint) ctx->Line.StippleFactor;
  2782.          break;
  2783.       case GL_LINE_WIDTH:
  2784.      *params = (GLint) ctx->Line.Width;
  2785.      break;
  2786.       case GL_LINE_WIDTH_GRANULARITY:
  2787.      *params = (GLint) LINE_WIDTH_GRANULARITY;
  2788.      break;
  2789.       case GL_LINE_WIDTH_RANGE:
  2790.      params[0] = (GLint) MIN_LINE_WIDTH;
  2791.      params[1] = (GLint) MAX_LINE_WIDTH;
  2792.      break;
  2793.       case GL_LIST_BASE:
  2794.      *params = (GLint) ctx->List.ListBase;
  2795.      break;
  2796.       case GL_LIST_INDEX:
  2797.      *params = (GLint) gl_list_index();
  2798.      break;
  2799.       case GL_LIST_MODE:
  2800.      *params = ctx->ExecuteFlag ? (GLint) GL_COMPILE_AND_EXECUTE
  2801.                      : (GLint) GL_COMPILE;
  2802.      break;
  2803.       case GL_INDEX_LOGIC_OP:
  2804.      *params = (GLint) ctx->Color.IndexLogicOpEnabled;
  2805.      break;
  2806.       case GL_COLOR_LOGIC_OP:
  2807.      *params = (GLint) ctx->Color.ColorLogicOpEnabled;
  2808.      break;
  2809.       case GL_LOGIC_OP_MODE:
  2810.          *params = (GLint) ctx->Color.LogicOp;
  2811.          break;
  2812.       case GL_MAP1_COLOR_4:
  2813.      *params = (GLint) ctx->Eval.Map1Color4;
  2814.      break;
  2815.       case GL_MAP1_GRID_DOMAIN:
  2816.      params[0] = (GLint) ctx->Eval.MapGrid1u1;
  2817.      params[1] = (GLint) ctx->Eval.MapGrid1u2;
  2818.      break;
  2819.       case GL_MAP1_GRID_SEGMENTS:
  2820.      *params = (GLint) ctx->Eval.MapGrid1un;
  2821.      break;
  2822.       case GL_MAP1_INDEX:
  2823.      *params = (GLint) ctx->Eval.Map1Index;
  2824.      break;
  2825.       case GL_MAP1_NORMAL:
  2826.      *params = (GLint) ctx->Eval.Map1Normal;
  2827.      break;
  2828.       case GL_MAP1_TEXTURE_COORD_1:
  2829.      *params = (GLint) ctx->Eval.Map1TextureCoord1;
  2830.      break;
  2831.       case GL_MAP1_TEXTURE_COORD_2:
  2832.      *params = (GLint) ctx->Eval.Map1TextureCoord2;
  2833.      break;
  2834.       case GL_MAP1_TEXTURE_COORD_3:
  2835.      *params = (GLint) ctx->Eval.Map1TextureCoord3;
  2836.      break;
  2837.       case GL_MAP1_TEXTURE_COORD_4:
  2838.      *params = (GLint) ctx->Eval.Map1TextureCoord4;
  2839.      break;
  2840.       case GL_MAP1_VERTEX_3:
  2841.      *params = (GLint) ctx->Eval.Map1Vertex3;
  2842.      break;
  2843.       case GL_MAP1_VERTEX_4:
  2844.      *params = (GLint) ctx->Eval.Map1Vertex4;
  2845.      break;
  2846.       case GL_MAP2_COLOR_4:
  2847.      *params = (GLint) ctx->Eval.Map2Color4;
  2848.      break;
  2849.       case GL_MAP2_GRID_DOMAIN:
  2850.      params[0] = (GLint) ctx->Eval.MapGrid2u1;
  2851.      params[1] = (GLint) ctx->Eval.MapGrid2u2;
  2852.      params[2] = (GLint) ctx->Eval.MapGrid2v1;
  2853.      params[3] = (GLint) ctx->Eval.MapGrid2v2;
  2854.      break;
  2855.       case GL_MAP2_GRID_SEGMENTS:
  2856.      params[0] = (GLint) ctx->Eval.MapGrid2un;
  2857.      params[1] = (GLint) ctx->Eval.MapGrid2vn;
  2858.      break;
  2859.       case GL_MAP2_INDEX:
  2860.      *params = (GLint) ctx->Eval.Map2Index;
  2861.      break;
  2862.       case GL_MAP2_NORMAL:
  2863.      *params = (GLint) ctx->Eval.Map2Normal;
  2864.      break;
  2865.       case GL_MAP2_TEXTURE_COORD_1:
  2866.      *params = (GLint) ctx->Eval.Map2TextureCoord1;
  2867.      break;
  2868.       case GL_MAP2_TEXTURE_COORD_2:
  2869.      *params = (GLint) ctx->Eval.Map2TextureCoord2;
  2870.      break;
  2871.       case GL_MAP2_TEXTURE_COORD_3:
  2872.      *params = (GLint) ctx->Eval.Map2TextureCoord3;
  2873.      break;
  2874.       case GL_MAP2_TEXTURE_COORD_4:
  2875.      *params = (GLint) ctx->Eval.Map2TextureCoord4;
  2876.      break;
  2877.       case GL_MAP2_VERTEX_3:
  2878.      *params = (GLint) ctx->Eval.Map2Vertex3;
  2879.      break;
  2880.       case GL_MAP2_VERTEX_4:
  2881.      *params = (GLint) ctx->Eval.Map2Vertex4;
  2882.      break;
  2883.       case GL_MAP_COLOR:
  2884.      *params = (GLint) ctx->Pixel.MapColorFlag;
  2885.      break;
  2886.       case GL_MAP_STENCIL:
  2887.      *params = (GLint) ctx->Pixel.MapStencilFlag;
  2888.      break;
  2889.       case GL_MATRIX_MODE:
  2890.      *params = (GLint) ctx->Transform.MatrixMode;
  2891.      break;
  2892.       case GL_MAX_ATTRIB_STACK_DEPTH:
  2893.          *params = (GLint) MAX_ATTRIB_STACK_DEPTH;
  2894.          break;
  2895.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  2896.          *params = (GLint) MAX_CLIENT_ATTRIB_STACK_DEPTH;
  2897.          break;
  2898.       case GL_MAX_CLIP_PLANES:
  2899.          *params = (GLint) MAX_CLIP_PLANES;
  2900.          break;
  2901.       case GL_MAX_EVAL_ORDER:
  2902.      *params = (GLint) MAX_EVAL_ORDER;
  2903.      break;
  2904.       case GL_MAX_LIGHTS:
  2905.          *params = (GLint) MAX_LIGHTS;
  2906.          break;
  2907.       case GL_MAX_LIST_NESTING:
  2908.          *params = (GLint) MAX_LIST_NESTING;
  2909.          break;
  2910.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  2911.          *params = (GLint) MAX_MODELVIEW_STACK_DEPTH;
  2912.          break;
  2913.       case GL_MAX_NAME_STACK_DEPTH:
  2914.      *params = (GLint) MAX_NAME_STACK_DEPTH;
  2915.      break;
  2916.       case GL_MAX_PIXEL_MAP_TABLE:
  2917.      *params = (GLint) MAX_PIXEL_MAP_TABLE;
  2918.      break;
  2919.       case GL_MAX_PROJECTION_STACK_DEPTH:
  2920.          *params = (GLint) MAX_PROJECTION_STACK_DEPTH;
  2921.          break;
  2922.       case GL_MAX_TEXTURE_SIZE:
  2923.      *params = (GLint) MAX_TEXTURE_SIZE;
  2924.      break;
  2925.       case GL_MAX_TEXTURE_STACK_DEPTH:
  2926.      *params = (GLint) MAX_TEXTURE_STACK_DEPTH;
  2927.      break;
  2928.       case GL_MAX_VIEWPORT_DIMS:
  2929.          params[0] = (GLint) MAX_WIDTH;
  2930.          params[1] = (GLint) MAX_HEIGHT;
  2931.          break;
  2932.       case GL_MODELVIEW_MATRIX:
  2933.      for (i=0;i<16;i++) {
  2934.         params[i] = (GLint) ctx->ModelViewMatrix[i];
  2935.      }
  2936.      break;
  2937.       case GL_MODELVIEW_STACK_DEPTH:
  2938.      *params = (GLint) ctx->ModelViewStackDepth;
  2939.      break;
  2940.       case GL_NAME_STACK_DEPTH:
  2941.      *params = (GLint) ctx->Select.NameStackDepth;
  2942.      break;
  2943.       case GL_NORMALIZE:
  2944.      *params = (GLint) ctx->Transform.Normalize;
  2945.      break;
  2946.       case GL_PACK_ALIGNMENT:
  2947.      *params = ctx->Pack.Alignment;
  2948.      break;
  2949.       case GL_PACK_LSB_FIRST:
  2950.      *params = (GLint) ctx->Pack.LsbFirst;
  2951.      break;
  2952.       case GL_PACK_ROW_LENGTH:
  2953.      *params = ctx->Pack.RowLength;
  2954.      break;
  2955.       case GL_PACK_SKIP_PIXELS:
  2956.      *params = ctx->Pack.SkipPixels;
  2957.      break;
  2958.       case GL_PACK_SKIP_ROWS:
  2959.      *params = ctx->Pack.SkipRows;
  2960.      break;
  2961.       case GL_PACK_SWAP_BYTES:
  2962.      *params = (GLint) ctx->Pack.SwapBytes;
  2963.      break;
  2964.       case GL_PACK_SKIP_IMAGES_EXT:
  2965.          *params = ctx->Pack.SkipImages;
  2966.          break;
  2967.       case GL_PACK_IMAGE_HEIGHT_EXT:
  2968.          *params = ctx->Pack.ImageHeight;
  2969.          break;
  2970.       case GL_PERSPECTIVE_CORRECTION_HINT:
  2971.      *params = (GLint) ctx->Hint.PerspectiveCorrection;
  2972.      break;
  2973.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  2974.      *params = ctx->Pixel.MapAtoAsize;
  2975.      break;
  2976.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  2977.      *params = ctx->Pixel.MapBtoBsize;
  2978.      break;
  2979.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  2980.      *params = ctx->Pixel.MapGtoGsize;
  2981.      break;
  2982.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  2983.      *params = ctx->Pixel.MapItoAsize;
  2984.      break;
  2985.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  2986.      *params = ctx->Pixel.MapItoBsize;
  2987.      break;
  2988.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  2989.      *params = ctx->Pixel.MapItoGsize;
  2990.      break;
  2991.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  2992.      *params = ctx->Pixel.MapItoIsize;
  2993.      break;
  2994.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  2995.      *params = ctx->Pixel.MapItoRsize;
  2996.      break;
  2997.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  2998.      *params = ctx->Pixel.MapRtoRsize;
  2999.      break;
  3000.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  3001.      *params = ctx->Pixel.MapStoSsize;
  3002.      break;
  3003.       case GL_POINT_SIZE:
  3004.          *params = (GLint) ctx->Point.Size;
  3005.          break;
  3006.       case GL_POINT_SIZE_GRANULARITY:
  3007.      *params = (GLint) POINT_SIZE_GRANULARITY;
  3008.      break;
  3009.       case GL_POINT_SIZE_RANGE:
  3010.      params[0] = (GLint) MIN_POINT_SIZE;
  3011.      params[1] = (GLint) MAX_POINT_SIZE;
  3012.      break;
  3013.       case GL_POINT_SMOOTH:
  3014.      *params = (GLint) ctx->Point.SmoothFlag;
  3015.      break;
  3016.       case GL_POINT_SMOOTH_HINT:
  3017.      *params = (GLint) ctx->Hint.PointSmooth;
  3018.      break;
  3019.       case GL_POLYGON_MODE:
  3020.      params[0] = (GLint) ctx->Polygon.FrontMode;
  3021.      params[1] = (GLint) ctx->Polygon.BackMode;
  3022.      break;
  3023. #ifdef GL_EXT_polygon_offset
  3024.       case GL_POLYGON_OFFSET_BIAS_EXT:
  3025.          *params = (GLint) ctx->Polygon.OffsetUnits;
  3026.          break;
  3027. #endif
  3028.       case GL_POLYGON_OFFSET_FACTOR:
  3029.          *params = (GLint) ctx->Polygon.OffsetFactor;
  3030.          break;
  3031.       case GL_POLYGON_OFFSET_UNITS:
  3032.          *params = (GLint) ctx->Polygon.OffsetUnits;
  3033.          break;
  3034.       case GL_POLYGON_SMOOTH:
  3035.      *params = (GLint) ctx->Polygon.SmoothFlag;
  3036.      break;
  3037.       case GL_POLYGON_SMOOTH_HINT:
  3038.      *params = (GLint) ctx->Hint.PolygonSmooth;
  3039.      break;
  3040.       case GL_POLYGON_STIPPLE:
  3041.      for (i=0;i<32;i++) {        /* RIGHT? */
  3042.         params[i] = (GLint) ctx->PolygonStipple[i];
  3043.      }
  3044.      break;
  3045.       case GL_PROJECTION_MATRIX:
  3046.      for (i=0;i<16;i++) {
  3047.         params[i] = (GLint) ctx->ProjectionMatrix[i];
  3048.      }
  3049.      break;
  3050.       case GL_PROJECTION_STACK_DEPTH:
  3051.      *params = (GLint) ctx->ProjectionStackDepth;
  3052.      break;
  3053.       case GL_READ_BUFFER:
  3054.      *params = (GLint) ctx->Pixel.ReadBuffer;
  3055.      break;
  3056.       case GL_RED_BIAS:
  3057.          *params = (GLint) ctx->Pixel.RedBias;
  3058.          break;
  3059.       case GL_RED_BITS:
  3060.          *params = (GLint) bits( ctx->Visual->RedScale );
  3061.          break;
  3062.       case GL_RED_SCALE:
  3063.          *params = (GLint) ctx->Pixel.RedScale;
  3064.          break;
  3065.       case GL_RENDER_MODE:
  3066.      *params = (GLint) ctx->RenderMode;
  3067.      break;
  3068.       case GL_RGBA_MODE:
  3069.      *params = (GLint) ctx->Visual->RGBAflag;
  3070.      break;
  3071.       case GL_SCISSOR_BOX:
  3072.      params[0] = (GLint) ctx->Scissor.X;
  3073.      params[1] = (GLint) ctx->Scissor.Y;
  3074.      params[2] = (GLint) ctx->Scissor.Width;
  3075.      params[3] = (GLint) ctx->Scissor.Height;
  3076.      break;
  3077.       case GL_SCISSOR_TEST:
  3078.      *params = (GLint) ctx->Scissor.Enabled;
  3079.      break;
  3080.       case GL_SHADE_MODEL:
  3081.      *params = (GLint) ctx->Light.ShadeModel;
  3082.      break;
  3083.       case GL_STENCIL_BITS:
  3084.          *params = 8*sizeof(GLstencil);
  3085.          break;
  3086.       case GL_STENCIL_CLEAR_VALUE:
  3087.      *params = (GLint) ctx->Stencil.Clear;
  3088.      break;
  3089.       case GL_STENCIL_FAIL:
  3090.      *params = (GLint) ctx->Stencil.FailFunc;
  3091.      break;
  3092.       case GL_STENCIL_FUNC:
  3093.      *params = (GLint) ctx->Stencil.Function;
  3094.      break;
  3095.       case GL_STENCIL_PASS_DEPTH_FAIL:
  3096.      *params = (GLint) ctx->Stencil.ZFailFunc;
  3097.      break;
  3098.       case GL_STENCIL_PASS_DEPTH_PASS:
  3099.      *params = (GLint) ctx->Stencil.ZPassFunc;
  3100.      break;
  3101.       case GL_STENCIL_REF:
  3102.      *params = (GLint) ctx->Stencil.Ref;
  3103.      break;
  3104.       case GL_STENCIL_TEST:
  3105.      *params = (GLint) ctx->Stencil.Enabled;
  3106.      break;
  3107.       case GL_STENCIL_VALUE_MASK:
  3108.      *params = (GLint) ctx->Stencil.ValueMask;
  3109.      break;
  3110.       case GL_STENCIL_WRITEMASK:
  3111.      *params = (GLint) ctx->Stencil.WriteMask;
  3112.      break;
  3113.       case GL_STEREO:
  3114.      *params = 0;  /* TODO */
  3115.      break;
  3116.       case GL_SUBPIXEL_BITS:
  3117.      *params = 0;  /* TODO */
  3118.      break;
  3119.       case GL_TEXTURE_1D:
  3120.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? 1.0 : 0.0;
  3121.      break;
  3122.       case GL_TEXTURE_2D:
  3123.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? 1.0 : 0.0;
  3124.      break;
  3125.       case GL_TEXTURE_3D_EXT:
  3126.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? 1.0 : 0.0;
  3127.      break;
  3128.       case GL_TEXTURE_ENV_COLOR:
  3129.      params[0] = FLOAT_TO_INT( ctx->Texture.EnvColor[0] );
  3130.      params[1] = FLOAT_TO_INT( ctx->Texture.EnvColor[1] );
  3131.      params[2] = FLOAT_TO_INT( ctx->Texture.EnvColor[2] );
  3132.      params[3] = FLOAT_TO_INT( ctx->Texture.EnvColor[3] );
  3133.      break;
  3134.       case GL_TEXTURE_ENV_MODE:
  3135.      *params = (GLint) ctx->Texture.EnvMode;
  3136.      break;
  3137.       case GL_TEXTURE_GEN_S:
  3138.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? 1 : 0;
  3139.      break;
  3140.       case GL_TEXTURE_GEN_T:
  3141.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? 1 : 0;
  3142.      break;
  3143.       case GL_TEXTURE_GEN_R:
  3144.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? 1 : 0;
  3145.      break;
  3146.       case GL_TEXTURE_GEN_Q:
  3147.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? 1 : 0;
  3148.      break;
  3149.       case GL_TEXTURE_MATRIX:
  3150.          for (i=0;i<16;i++) {
  3151.         params[i] = (GLint) ctx->TextureMatrix[i];
  3152.      }
  3153.      break;
  3154.       case GL_TEXTURE_STACK_DEPTH:
  3155.      *params = (GLint) ctx->TextureStackDepth;
  3156.      break;
  3157.       case GL_UNPACK_ALIGNMENT:
  3158.      *params = ctx->Unpack.Alignment;
  3159.      break;
  3160.       case GL_UNPACK_LSB_FIRST:
  3161.      *params = (GLint) ctx->Unpack.LsbFirst;
  3162.      break;
  3163.       case GL_UNPACK_ROW_LENGTH:
  3164.      *params = ctx->Unpack.RowLength;
  3165.      break;
  3166.       case GL_UNPACK_SKIP_PIXELS:
  3167.      *params = ctx->Unpack.SkipPixels;
  3168.      break;
  3169.       case GL_UNPACK_SKIP_ROWS:
  3170.      *params = ctx->Unpack.SkipRows;
  3171.      break;
  3172.       case GL_UNPACK_SWAP_BYTES:
  3173.      *params = (GLint) ctx->Unpack.SwapBytes;
  3174.      break;
  3175.       case GL_UNPACK_SKIP_IMAGES_EXT:
  3176.          *params = ctx->Unpack.SkipImages;
  3177.          break;
  3178.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  3179.          *params = ctx->Unpack.ImageHeight;
  3180.          break;
  3181.       case GL_VIEWPORT:
  3182.          params[0] = (GLint) ctx->Viewport.X;
  3183.          params[1] = (GLint) ctx->Viewport.Y;
  3184.          params[2] = (GLint) ctx->Viewport.Width;
  3185.          params[3] = (GLint) ctx->Viewport.Height;
  3186.          break;
  3187.       case GL_ZOOM_X:
  3188.      *params = (GLint) ctx->Pixel.ZoomX;
  3189.      break;
  3190.       case GL_ZOOM_Y:
  3191.      *params = (GLint) ctx->Pixel.ZoomY;
  3192.      break;
  3193.       case GL_VERTEX_ARRAY_SIZE:
  3194.          *params = ctx->Array.VertexSize;
  3195.          break;
  3196.       case GL_VERTEX_ARRAY_TYPE:
  3197.          *params = ctx->Array.VertexType;
  3198.          break;
  3199.       case GL_VERTEX_ARRAY_STRIDE:
  3200.          *params = ctx->Array.VertexStride;
  3201.          break;
  3202.       case GL_VERTEX_ARRAY_COUNT_EXT:
  3203.          *params = 0;
  3204.          break;
  3205.       case GL_NORMAL_ARRAY_TYPE:
  3206.          *params = ctx->Array.NormalType;
  3207.          break;
  3208.       case GL_NORMAL_ARRAY_STRIDE:
  3209.          *params = ctx->Array.NormalStride;
  3210.          break;
  3211.       case GL_NORMAL_ARRAY_COUNT_EXT:
  3212.          *params = 0;
  3213.          break;
  3214.       case GL_COLOR_ARRAY_SIZE:
  3215.          *params = ctx->Array.ColorSize;
  3216.          break;
  3217.       case GL_COLOR_ARRAY_TYPE:
  3218.          *params = ctx->Array.ColorType;
  3219.          break;
  3220.       case GL_COLOR_ARRAY_STRIDE:
  3221.          *params = ctx->Array.ColorStride;
  3222.          break;
  3223.       case GL_COLOR_ARRAY_COUNT_EXT:
  3224.          *params = 0;
  3225.          break;
  3226.       case GL_INDEX_ARRAY_TYPE:
  3227.          *params = ctx->Array.IndexType;
  3228.          break;
  3229.       case GL_INDEX_ARRAY_STRIDE:
  3230.          *params = ctx->Array.IndexStride;
  3231.          break;
  3232.       case GL_INDEX_ARRAY_COUNT_EXT:
  3233.          *params = 0;
  3234.          break;
  3235.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  3236.          *params = ctx->Array.TexCoordSize;
  3237.          break;
  3238.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  3239.          *params = ctx->Array.TexCoordType;
  3240.          break;
  3241.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  3242.          *params = ctx->Array.TexCoordStride;
  3243.          break;
  3244.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  3245.          *params = 0;
  3246.          break;
  3247.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  3248.          *params = ctx->Array.EdgeFlagStride;
  3249.          break;
  3250.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  3251.          *params = 0;
  3252.          break;
  3253.       case GL_TEXTURE_BINDING_1D:
  3254.          *params = ctx->Texture.Current1D->Name;
  3255.           break;
  3256.       case GL_TEXTURE_BINDING_2D:
  3257.          *params = ctx->Texture.Current2D->Name;
  3258.           break;
  3259.       case GL_TEXTURE_3D_BINDING_EXT:
  3260.          *params = ctx->Texture.Current3D->Name;
  3261.           break;
  3262.  
  3263.       default:
  3264.          gl_error( ctx, GL_INVALID_ENUM, "glGetIntegerv" );
  3265.    }
  3266. }
  3267.  
  3268.  
  3269.  
  3270. void gl_GetPointerv( GLcontext *ctx, GLenum pname, GLvoid **params )
  3271. {
  3272.    switch (pname) {
  3273.       case GL_VERTEX_ARRAY_POINTER:
  3274.          *params = ctx->Array.VertexPtr;
  3275.          break;
  3276.       case GL_NORMAL_ARRAY_POINTER:
  3277.          *params = ctx->Array.NormalPtr;
  3278.          break;
  3279.       case GL_COLOR_ARRAY_POINTER:
  3280.          *params = ctx->Array.ColorPtr;
  3281.          break;
  3282.       case GL_INDEX_ARRAY_POINTER:
  3283.          *params = ctx->Array.IndexPtr;
  3284.          break;
  3285.       case GL_TEXTURE_COORD_ARRAY_POINTER:
  3286.          *params = ctx->Array.TexCoordPtr;
  3287.          break;
  3288.       case GL_EDGE_FLAG_ARRAY_POINTER:
  3289.          *params = ctx->Array.EdgeFlagPtr;
  3290.          break;
  3291.       case GL_FEEDBACK_BUFFER_POINTER:
  3292.          *params = ctx->Feedback.Buffer;
  3293.          break;
  3294.       default:
  3295.          gl_error( ctx, GL_INVALID_ENUM, "glGetPointerv" );
  3296.          return;
  3297.    }
  3298. }
  3299.